欢迎各位兄弟 发布技术文章
这里的技术是共享的
这两个 awk 命令都使用了 -F: 选项来指定字段分隔符为冒号 :,这意味着它们都将 /etc/passwd 文件中的每一行视为由冒号分隔的多个字段。然而,它们之间有一个关键的区别在于 {print NF} 和 {print $NF} 的使用:
[root@localhost ~]# awk -F: '{print NF}' /etc/passwd
这里的 NF 是一个特殊的 awk 变量,代表当前记录(即行)中的字段总数。因此,这个命令将输出 /etc/passwd 文件中每一行的字段数量。
对于标准的 /etc/passwd 文件格式,每行有7个字段(用户名、加密密码、用户ID、组ID、用户描述、主目录和登录Shell),所以此命令会为文件中的每一行输出 7。
[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd
$NF 表示引用当前记录中最后一个字段的内容。这里的 NF 是前述的字段数变量,而 $ 符号用于访问该字段编号对应的字段值。
因此,这个命令会输出 /etc/passwd 文件中每一行最后一个字段的内容。对于 /etc/passwd 文件来说,这将是每个用户的登录Shell路径(例如 /bin/bash, /sbin/nologin 等等)。
总结:
{print NF} 输出的是每行的字段数量。
{print $NF} 输出的是每行最后一个字段的实际内容。
这样,虽然两个命令看起来相似,但它们执行的功能和产生的输出是完全不同的。