NR > var の条件を持つ awk print コマンド

NR > var の条件を持つ awk print コマンド

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 }が、/^title/3 番目のレコードまで表示されません。したがって、最初の 2 つのレコードでは はo初期化されておらず、 とFNR>o評価されますtrue( FNR==1&FNR==2は であるためgreater than zero)。

考えられる解決策:

o && FNR>o
  • oゼロ以外でなければならないことを指定するFNR>o

また、o1文字の変数名としてはやや紛らわしいので、代わりにのような文字nや、のようなより説明的な単語を使用することを検討してください。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

関連情報