NR> var条件のawk印刷コマンド

NR> var条件のawk印刷コマンド

awkこのコードを使用していくつかのtxtファイルを修正しようとしています。

awk -F":" '/^title/ { o=FNR+2 } ;FNR>o { print sprintf("%-10s %-10d %-10s",FILENAME,o,$0) }' r.txt

ただし、条件をこれに置き換えるまでは機能しませんでしたFNR>5

だからここでたくさん試してみましたが、解決策が見つかりませんでした。"FNR>o"&を入れFNR>$oたのに何も入れなかった

だからあなたは私を助けることができます!入力する:

date: 22.01.2020
name : xrgsm02
title : RCV20
----------------
----------------
15   20
30   40
50   12
55   77

出力

r.txt   5  15   20
r.txt   5  30   40
r.txt   5  50   12
r.txt   5  55   77

答え1

質問:

FNR>o
  • >初期化されていない値で演算子を使用する
    • 初期化されていませんが、o数値は0で、文字列値は空の文字列です。
    • スクリプトではoに設定されていますが、/^title/ { o=FNR+2 }3/^title/番目のレコードまでは表示されません。したがって、最初の2つのレコードはo初期化されず、FNR>o次のように評価されます。true(なぜならFNR==1&)FNR==2greater than zero

考えられる解決策:

o && FNR>o
  • 仕様はoゼロでなければなりません。FNR>o

また、o単一文字変数名は多少混乱しています。代わりに、like文字nまたはより説明的な単語likeを使用することをお勧めします。output


print sprintf("%-10s %-10d %-10s",FILENAME,o,$0)

次のように単純化できます。

printf("%-10s %-10d %-10s\n",FILENAME,o,$0)

でも:

printf "%-10s %-10d %-10s\n",FILENAME,o,$0

関連情報