2011-01-26 5 views
2

FNRのデフォルト値を変更して画面に出力する方法はありますか?awkのFNR値を設定する

私が試してみました:

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

を、私は解決策は、NRとinterhangeableになることを期待しています。

+0

デフォルト値はどういう意味ですか? 'FNR'は現在の入力レコードの番号なので、レコードごとに変更されます。 –

+0

FNRを任意の数値に設定できると思いますので、0または2で開始してそこから増やすことができます。 – Kay

+0

レコード番号は0ベースではなく1ベースです。 FNR == 1が最初の行です –

答えて

2

はい、BEGINを使用して:

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

しかし、これは、入力がstdinない場合(と、少なくともしないGNU AWKに、すなわちファイル引数が与えられて)動作しないと思われます。

+0

絶対星、FNRの値を簡単に操作できることは驚きです。 – Kay

2

は、なぜあなた自身のoffset変数を宣言しない:

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

'BEGIN'節でその宣言が必要なので、入力行ごとに不必要に実行されることはありません。そうでなければ+1。 –

+0

チップのおかげで。 – dogbane

0
$ awk 'FNR > 2 {print $0, FNR}' yourfilename 

FNRは必ずしもNRと互換ではありません。複数のファイルを指定すると、各ファイルの前にFNRがゼロに再初期化されます。 NRはそうではありません。

1

正解は次のとおりです。しないでください!!!! FNRだけを残して、それはそれです。現在のファイルで今までに読み込まれたレコードの数以外の何らかのカウンターが必要な場合は、単純にそれを表すカウンターを作成し、組み込み変数の意味を混乱させないでください。

関連する問題