2011-01-26 87 views
2

有什麼方法可以改變FNR的默認值,然後將其輸出到屏幕上。在awk中設置FNR值

我曾嘗試:

(piped output....) | awk '{FNR=0} {print $0, FNR}' 

我希望的解決方案將是interhangeable與NR。

+0

你是什麼意思的默認值? `FNR`是當前輸入記錄的編號,因此每個記錄都會改變。 – 2011-01-26 12:00:50

+0

我相信你可以設置FNR爲任何數字,所以你可以從0或2開始,然後從那裏增加。 – Kay 2011-01-26 12:03:04

+0

記錄號不是基於0的,而是基於1的。 FNR == 1是第一行 – 2011-01-26 12:03:43

回答

2

是,通過BEGIN

$ awk 'BEGIN {FNR=2} {print $0, FNR}' file.txt 
one 3 
two 4 
three 5 
four 6 

然而,這似乎不是當輸入不stdin工作(即一個文件指定參數;在GNU AWK至少不是)。

2

爲什麼不聲明自己offset變量:

(piped output....) | awk 'BEGIN {offset=2} {print $0, FNR+offset}' 
0
$ awk 'FNR > 2 {print $0, FNR}' yourfilename 

FNR不一定與NR互換。如果您指定了多個文件,FNR會在每個文件之前重新初始化爲零。 NR沒有。

1

正確的答案是:不要這樣做!讓FNR獨自一人,就是這樣。如果您需要一些計數器來表示除當前文件中迄今爲止讀取的記錄數以外的其他計數器,那麼只需創建一個計數器來表示該計數器,請勿混淆內置變量的含義。