我有一个文件(xyz.dat),其中包含各种随机语句。我需要做的是在该文件中搜索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