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==2
greater 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