さまざまなランダムステートメントを含むファイル(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