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
また、o
1文字の変数名としてはやや紛らわしいので、代わりにのような文字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