1行の値が別の値の直後にある場合にのみファイルに印刷します。 bash

1行の値が別の値の直後にある場合にのみファイルに印刷します。 bash

さまざまなランダムステートメントを含むファイル(xyz.dat)があります。私がしなければならないのは、そのファイルから1行を検索VALUE1し、VALUE1その直後に続く新しい行だけをファイルに印刷することですVALUE2

入力例:

1 VALUE1
2 VALUE1
3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2
7 VALUE2

予想出力:

3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2

答え1

シンプルsed方法:

sed -n '/ VALUE1$/{ N; / VALUE2$/p }' xyz.dat > new.txt

new.txtコンテンツ:

3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2

答え2

sedで

sed '/ VALUE1$/!d;N;/ VALUE2$/b;D' infile

答え3

別のawk方法:

awk '/VALUE1/{ bkup=$0 } /VALUE2/ && bkup{print bkup ORS $0; bkup=""}' infile

答え4

二つAwk解決策:

- 機能基準getline

awk '/ VALUE1$/ && (getline nl) > 0 && nl ~ /VALUE2$/{ print $0 ORS nl }' xyz.dat

- レコード数による比較:

awk '/ VALUE1$/{ rec = $0; rn = NR+1 }NR == rn && /VALUE2$/{ print rec ORS $0 }' xyz.dat

出力(両方):

3 VALUE1
4 VALUE2
5 VALUE1
6 VALUE2

関連情報