2016-01-25 130 views
0

我使用awk命令從/ etc/passwd獲取用戶列表。現在我想給它編號,這是我使用的命令,但它似乎不起作用,我如何才能使它工作?編號awk命令的輸出行

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

我期待它輸出:

USER1 = xyz 
USER2 = abc 

等等

+0

實際上並不是你想要的,只是一個想法:'cut -d:-f1/etc/passwd | nl' – user2683246

+1

'pr -n -l1 -t/etc/passwd'會給你行號輸出(不帶USER前綴)。 'nl'不會給空行編號,這對'/ etc/passwd'不應該是一個問題,但可能是其他上下文中的問題(並且可能是其他上下文中所需的)。 –

+0

@Jonathan Leffler:'nl -ba'會對所有行 – user2683246

回答

3

你之所以只得到一個結果行是您的打印只有一個單獨的一行(最後),因爲匹配您使用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 

多虧了評論者更多的想法。

+0

進行編號並得到可排序的'USER $ {N}'值,也許OP會使用'printf(「USER%04d =%s \ n」,++ s,$ 1)'(沒有提到作爲標準,但通常是後續;-))。 。祝你們好運。 – shellter

+0

@shellter它已經被排序:-) – steffen

+1

我會建議在這兩種情況下,你使用'++ s'從1開始按照OP的意圖,或者可能只是使用'NR'。 –