我使用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