我使用awk
命令从/ etc / passwd获取用户列表。现在我想给它编号,这是我使用的命令,但它似乎不起作用,我该如何使它工作?
s=0
awk -F':' '{s+=1} END {print "USER"$s" = " $1}' /etc/passwd
我希望它输出:
USER1 = xyz
USER2 = abc
等等
答案 0 :(得分:3)
您只获得一个结果行的原因是您的打印仅匹配一行(最后一行),因为您使用END
关键字。
您不需要在shell中设置s=0
,因为变量由awk本身处理。正如@JonathanLeffler所提到的,$
在awk中选择一个字段。因此,$s
不会被变量s
的值替换,而是由字段s
替换,其中s
是变量值。 (如果s == 2
,则您打印第2号字段。)
试试这个:
# Start with 0 (using an extra variable s)
awk -F':' '{print "USER"s++" = " $1}' /etc/passwd
# Start with 1 (using the internal variable NR)
awk -F':' '{print "USER"NR" = " $1}' /etc/passwd
# Produce sortable output for further processing
awk -F':' '{printf "USER%04d=%s\n", NR-1, $1}' /etc/passwd
感谢评论者提出更多想法。