Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于patern连接和删除行_Bash_Shell_Awk_Sed_Vi - Fatal编程技术网

Bash 基于patern连接和删除行

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

我有一个超过200000行的文件。这些行被分组。每组行的开头以“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...  
在使用图像线重新开始之前,可能会有许多碎片线。我使用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我编辑了原始消息,以包含我尝试过的内容。至少它去掉了历史线。但它将碎片线合并成一行。