FNRのデフォルト値を変更して画面に出力する方法はありますか?awkのFNR値を設定する
私が試してみました:
(piped output....) | awk '{FNR=0} {print $0, FNR}'
を、私は解決策は、NRとinterhangeableになることを期待しています。
FNRのデフォルト値を変更して画面に出力する方法はありますか?awkのFNR値を設定する
私が試してみました:
(piped output....) | awk '{FNR=0} {print $0, FNR}'
を、私は解決策は、NRとinterhangeableになることを期待しています。
はい、BEGIN
を使用して:
$ awk 'BEGIN {FNR=2} {print $0, FNR}' file.txt
one 3
two 4
three 5
four 6
しかし、これは、入力がstdin
ない場合(と、少なくともしないGNU AWKに、すなわちファイル引数が与えられて)動作しないと思われます。
絶対星、FNRの値を簡単に操作できることは驚きです。 – Kay
は、なぜあなた自身のoffset
変数を宣言しない:
(piped output....) | awk 'BEGIN {offset=2} {print $0, FNR+offset}'
'BEGIN'節でその宣言が必要なので、入力行ごとに不必要に実行されることはありません。そうでなければ+1。 –
チップのおかげで。 – dogbane
$ awk 'FNR > 2 {print $0, FNR}' yourfilename
FNRは必ずしもNRと互換ではありません。複数のファイルを指定すると、各ファイルの前にFNRがゼロに再初期化されます。 NRはそうではありません。
正解は次のとおりです。しないでください!!!! FNRだけを残して、それはそれです。現在のファイルで今までに読み込まれたレコードの数以外の何らかのカウンターが必要な場合は、単純にそれを表すカウンターを作成し、組み込み変数の意味を混乱させないでください。
デフォルト値はどういう意味ですか? 'FNR'は現在の入力レコードの番号なので、レコードごとに変更されます。 –
FNRを任意の数値に設定できると思いますので、0または2で開始してそこから増やすことができます。 – Kay
レコード番号は0ベースではなく1ベースです。 FNR == 1が最初の行です –