对awk命令的输出行进行编号

时间:2016-01-25 15:05:53

标签: bash shell awk

我使用awk命令从/ etc / passwd获取用户列表。现在我想给它编号,这是我使用的命令,但它似乎不起作用,我该如何使它工作?

s=0
awk -F':' '{s+=1} END {print "USER"$s" = " $1}' /etc/passwd

我希望它输出:

USER1 = xyz
USER2 = abc

等等

1 个答案:

答案 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

感谢评论者提出更多想法。