1

2つの区切り文字(STARTとENDを含まない)の間にテキストを抽出している複数のファイルがあります。各ファイルを処理した後、ファイルが処理されたことを示す区切り文字、たとえば文字列「END」を出力したいと思います。処理された各ファイルの後に、文字列「END」を出力に追加するにはどうすればよいですか?例えば、

コンテンツを含むファイルが2つあるとします

file1.txt

line 1
line 2
START
I want to extract this text
and this text
END
line 3
line 4

file2.txt

line10
line20
START
I also want this text.
END
line 30

私は次のことを実行するかどうかを知っています:

awk '/START/,/END/{if (!/START/&&!/END/) print}' test*.txt

次の出力が得られます。

I want to extract this text
and this text
I also want this text.

しかし、私が望む出力は次のとおりです。

I want to extract this text
and this text
END
I also want this text.
END

各ファイルが処理された後、文字列「END」を出力に追加するにはどうすればよいですか?

4

3 に答える 3

1
FNR==1 && NR!=1 {print "END"}
END {print "END"}

だからあなたは持っているでしょう:

awk 'FNR==1 && NR!=1 {print "END"} /START/,/END/{if (!/START/&&!/END/) print} END {print "END"}' test*.txt
于 2010-12-16T19:03:54.350 に答える
0

変数FNRは新しいファイルごとに0にリセットされるため、ルールトリガーをオンにすることができます(FNR == 0 && NR!= 0):

(FNR==0) && (NR!=0) {
  print "END"
}
END {
  print "END"
}
于 2010-12-16T19:05:12.207 に答える
0

ENDの印刷をスキップするようにawkに要求しています。それを停止する。

awk '/START/,/END/{if (!/START/) print}' test*.txt
于 2010-12-17T11:18:12.123 に答える