2016-07-28 48 views
2

我有一个包含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... 

它可以有很多FRAG线将其与图像线条重新开始之前。我正在使用mac,所以我可以使用几乎任何工具。

我试过这个,但是它将多个FRAG线组合到一个IMAGE线上。

awk'/^IMAGE/{if(NR> 1)print a;一个= $ 0}/^(FRAG)/ {A = A”“$ 0}” INPUT.TXT> output.txt的

这导致在此:

IMAGE ... DATA1 .. 。FRAG ... ... DATA1 FRAG ... ... DATA2

+0

@Inian我编辑原始消息,包括我试过的东西。至少它删除了HISTO行。但它将FRAG线路组合在一起。 –

回答

2

这工作:

sed 's/>//' Input.txt|awk '/^IMAGE/{a=$0;next;} /^FRAG/{print ">"a,$0}' 

下一个语句是为了避免检查FRAG模式,如果它是用图形的线,从而加速了公关ocess。