我有一个包含以下输出的文件:
BP 0 test:
case id Name
====== ======== =================
0 82 a_case-2-0-0
BP 1 test:
case id Name
====== ======== =================
0 86 a_case-2-1-0
BP 2 test:
case id Name
====== ======== =================
BP 3 test:
case id Name
====== ======== =================
0 93 a_case-2-3-0
所以,只有“BP 0,1,3”有内容,所以我想要的是,是否有可能只转储'BP 0测试','BP 1测试'和'BP 3测试',只是想由于没有测试用例,因此进行了“BP 2测试”。
感谢您的帮助。
答案 0 :(得分:3)
虽然您可以使用[
和expr
等较小的shell工具一起打击某些内容,但使用awk
更容易实现这一点,您通常可以在操作系统还包括grep
和sed
。 :)
这是一个快速和肮脏的:
[ghoti@pc ~]$ cat doit
#!/usr/bin/awk -f
/^BP/ {
output=$0;
getline; output=sprintf("%s\n%s", output, $0);
getline; output=sprintf("%s\n%s", output, $0);
getline;
if (/[0-9]/) {
output=sprintf("%s\n%s\n", output, $0);
print output;
}
}
[ghoti@pc ~]$ ./doit input.txt
BP 0 test:
case id Name
====== ======== =================
0 82 a_case-2-0-0
BP 1 test:
case id Name
====== ======== =================
0 86 a_case-2-1-0
BP 3 test:
case id Name
====== ======== =================
0 93 a_case-2-3-0
[ghoti@pc ~]$
请注意,此脚本假定您输入数据的某些内容。如果if
语句中的条件不适合您,或者在单次测试后可能出现多个案例,则需要调整此脚本。
答案 1 :(得分:3)
$ awk -F'\n' -v RS='' -v ORS='\n\n' 'NF>3' input.txt
BP 0 test:
case id Name
====== ======== =================
0 82 a_case-2-0-0
BP 1 test:
case id Name
====== ======== =================
0 86 a_case-2-1-0
BP 3 test:
case id Name
====== ======== =================
0 93 a_case-2-3-0
答案 2 :(得分:2)
如果你的grep支持-B选项,那么你可以这样做
grep -B3 "_case-" <ip_file> | grep "BP "
以上的输出是
BP 0 test:
BP 1 test:
BP 3 test:
这里-B3在匹配模式上方打印3行。
答案 3 :(得分:0)
这可能对您有用:
sed 'N;N;N;$!N;/\n\n$/d' file