我有一个包含200,000多行的文件。线条分组。每组行的开头以" IMAGE"开头。然后是一行以" HISTO"开头。然后至少有一行,但通常是多行,以" FRAG"开头。
我需要:
1.删除以" HISTO"开头的任何行
2.对于每个" FRAG"我需要加入以前的" IMAGE"行。
这是一个例子。
>IMAGE ...data1...
>HISTO usually numbers 0 0 1 1 0 1 0
>FRAG ...data1...
>FRAG ...data2...
>IMAGE ...data2...
>HISTO usually numbers 0 0 1 1 0 1 0
>FRAG ...data1...
>FRAG ...data2...
>FRAG ...data3...
>FRAG ...data4...
结果需要如下所示:
>IMAGE ...data1... FRAG ...data1...
>IMAGE ...data1... FRAG ...data2...
>IMAGE ...data2... FRAG ...data1...
>IMAGE ...data2... FRAG ...data2...
>IMAGE ...data2... FRAG ...data3...
>IMAGE ...data2... FRAG ...data4...
在使用IMAGE线重新开始之前,可以有许多FRAG线。我正在使用mac,所以我几乎可以使用任何工具。
我试过这个,但是它将多个FRAG线组合到一个IMAGE线上。
awk' / ^ IMAGE / {if(NR> 1)打印a; a = $ 0} / ^(FRAG)/ {a = a" " $ 0}' Input.txt> output.txt
结果如下:
IMAGE ... data1 ... FRAG ... data1 ... FRAG ... data2 ...
答案 0 :(得分:2)
这有效:
sed 's/>//' Input.txt|awk '/^IMAGE/{a=$0;next;} /^FRAG/{print ">"a,$0}'
下一个声明是避免检查FRAG模式(如果它是带有IMAGE的行),从而加快了过程。