6

我有一个带有以下输出的文件:

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 test','BP 1 test'和'BP 3 test',只想输入' BP 2 test' 因为没有测试用例。

谢谢你的帮助。

4

4 回答 4

3

虽然您可以使用较小的 shell 工具(例如[and )将某些东西组合在一起expr,但使用 来完成此操作会更容易,您通常会在任何还包含andawk的操作系统中找到它。:)grepsed

这是一个快速和肮脏的:

[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语句中的条件不适合您,或者单次测试后可能出现多种情况,则需要调整此脚本。

于 2012-04-12T04:36:16.557 回答
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
于 2012-04-12T04:40:04.843 回答
2

如果您的 grep 支持 -B 选项,那么您可以这样做

grep -B3 "_case-" <ip_file> | grep "BP "

上面的输出是

BP 0 test:
BP 1 test:
BP 3 test:

这里 -B3 在匹配模式上方打印 3 行。

于 2012-04-12T04:25:12.843 回答
0

这可能对您有用:

sed 'N;N;N;$!N;/\n\n$/d' file
于 2012-04-12T08:46:08.483 回答