我使用awk
命令从/ etc/passwd获取用户列表。现在我想给它编号,这是我使用的命令,但它似乎不起作用,我如何才能使它工作?编号awk命令的输出行
s=0
awk -F':' '{s+=1} END {print "USER"$s" = " $1}' /etc/passwd
我期待它输出:
USER1 = xyz
USER2 = abc
等等
我使用awk
命令从/ etc/passwd获取用户列表。现在我想给它编号,这是我使用的命令,但它似乎不起作用,我如何才能使它工作?编号awk命令的输出行
s=0
awk -F':' '{s+=1} END {print "USER"$s" = " $1}' /etc/passwd
我期待它输出:
USER1 = xyz
USER2 = abc
等等
你之所以只得到一个结果行是您的打印只有一个单独的一行(最后),因为匹配您使用END
关键字。
因为变量是由awk本身处理的,所以您不需要在shell中设置s=0
。正如@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
多亏了评论者更多的想法。
实际上并不是你想要的,只是一个想法:'cut -d:-f1/etc/passwd | nl' – user2683246
'pr -n -l1 -t/etc/passwd'会给你行号输出(不带USER前缀)。 'nl'不会给空行编号,这对'/ etc/passwd'不应该是一个问题,但可能是其他上下文中的问题(并且可能是其他上下文中所需的)。 –
@Jonathan Leffler:'nl -ba'会对所有行 – user2683246