模式之间的处理线

时间:2013-05-22 11:01:59

标签: bash sed awk

我正在尝试从一个非常庞大的文档中提取一些信息。该文件遵循以下模式:

'>Title 1'

0 200, >name [numbers&letters]

1 200, >name [numbers&letters] 

2 200, >name [numbers&letters]

'>Title 2'

0 200, >name [numbers&letters]

1 200, >name [numbers&letters] 

...

'>Title 600.000'

对于Title之间的每组行,我需要打印3个以制表符分隔的列

  • 每个Title
  • 之间的行数
  • name
  • 组中第一行第二列的数字(第一行始终以0开头) - 在示例中,数字为200

我正在尝试使用Bash和awk / sed,但我无法为此任务定义一种循环。有任何想法吗?

2 个答案:

答案 0 :(得分:2)

未经测试但应该关闭:

awk -F'[ ,>]+' '
/^.>/ {
    if (count != "") { printf "%s %d %d\n", name, number, count }
    count = 0
    name = number = ""
    next
} 
NF {
    if (++count == 1) { number = $2; name = $3 }
}
END {
    if (count != "") { printf "%s %d %d\n", name, number, count }
}
' file

答案 1 :(得分:1)

awk '/^.>/{t=$0;next} NF{a[t]++} $1=="0"{b[t]=$2} END{for (i in a) print i,a[i],b[i]}' file