Bash 基于patern连接和删除行
我有一个超过200000行的文件。这些行被分组。每组行的开头以“IMAGE”开头,后面是一行以“HISTO”开头,然后是至少一行(但通常是多行)以“FRAG”开头。 我需要:Bash 基于patern连接和删除行,bash,shell,awk,sed,vi,Bash,Shell,Awk,Sed,Vi,我有一个超过200000行的文件。这些行被分组。每组行的开头以“IMAGE”开头,后面是一行以“HISTO”开头,然后是至少一行(但通常是多行)以“FRAG”开头。 我需要: 1.删除任何以“HISTO”开头的行。 2.对于每个“FRAG”行,我需要将其与前面的“IMAGE”行连接起来。 这里有一个例子 >IMAGE ...data1... >HISTO usually numbers 0 0 1 1 0 1 0 >FRAG ...data1... >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...
在使用图像线重新开始之前,可能会有许多碎片线。我使用mac,所以我几乎可以使用任何工具
我试过这个,但它是结合多个碎片线到一个单一的图像线
awk'/^IMAGE/{if(NR>1)打印a;a=$0}/^(FRAG)/{a=a”“$0}”Input.txt>output.txt
其结果是:
图像…数据1。。。碎片…数据1。。。碎片…数据2
这项工作:
sed 's/>//' Input.txt|awk '/^IMAGE/{a=$0;next;} /^FRAG/{print ">"a,$0}'
下一条语句是避免检查FRAG模式(如果它是带有图像的线条),从而加快过程。@Inian我编辑了原始消息,以包含我尝试过的内容。至少它去掉了历史线。但它将碎片线合并成一行。