欢迎各位兄弟 发布技术文章
这里的技术是共享的
这两个 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}
输出的是每行最后一个字段的实际内容。
这样,虽然两个命令看起来相似,但它们执行的功能和产生的输出是完全不同的。