以下命令使用 sed 命令实现:

sed -n '/^Chr/{x;p;d};H;${x;p}' filename | sed -e ':a' -e 'N' -e '$!ba' -e 's/
Chr/

Chr/g' | sed -e ':a' -e 'N' -e '$!ba' -e 's/

//g'

解释:

  • sed -n '/^Chr/{x;p;d};H;${x;p}' filename:该命令用于提取以 'Chr' 开头的行以及其前一行,并将它们保存在 hold space 中。

    • /^Chr/:匹配以 'Chr' 开头的行。
    • {x;p;d}:将 hold space 中的内容替换到模式空间,打印模式空间内容,并删除当前行。
    • H:将当前行追加到 hold space 中。
    • $:匹配文件末尾。
    • {x;p}:将 hold space 中的内容替换到模式空间,并打印模式空间内容。
  • `sed -e ':a' -e 'N' -e '$!ba' -e 's/ Chr/

Chr/g':该命令用于在每个 'Chr' 开头行前插入一个空行。 * :a:定义一个名为 'a' 的标签。 * N:将下一行追加到模式空间。 * $!ba:如果当前行不是文件末尾,则跳转到标签 'a'。 * s/ Chr/

Chr/g`:将所有匹配 'Chr' 开头的行的换行符替换为两个换行符。

  • `sed -e ':a' -e 'N' -e '$!ba' -e 's/

//g':该命令用于删除所有连续的空行。 * :a:定义一个名为 'a' 的标签。 * N:将下一行追加到模式空间。 * $!ba:如果当前行不是文件末尾,则跳转到标签 'a'。 * s/

//g`:删除所有连续的空行。

示例:

输入文件:

Chr.1
ASCDJSVHUIDSHNGDUHVDVHJKSNUJKDFHDUDSNFJDNSFJJFHJSJKHF
Chr.test
Contig 1
DXVXKJCVBHKXCBVKJBNSJEHFUSHDBNJKBGSHBGKJSBDGKJBSDK
Contig 141
FCNJLKHNLJEHFKLSFKLXJVKLKCLXJVKCXLJBLKXCJBKCXJNBKXCNKNFKXCVHUINWE
Contig 151
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 1511 
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXNCLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 15341 
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXNHKJXHCVKJXCHLVJCKXN 
Contig 5151 
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 354151 
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 13251 
CLBHJHBVKLJXCHKBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 15551 
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 15881 
CLBHJHBVKLJJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 156891 
CLBHJHBVKLJXCHKJNGWJKEBFUEWEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN

输出文件:

Chr.1
ASCDJSVHUIDSHNGDUHVDVHJKSNUJKDFHDUDSNFJDNSFJJFHJSJKHF

Chr.test
Contig 1
DXVXKJCVBHKXCBVKJBNSJEHFUSHDBNJKBGSHBGKJSBDGKJBSDK
Contig 141
FCNJLKHNLJEHFKLSFKLXJVKLKCLXJVKCXLJBLKXCJBKCXJNBKXCNKNFKXCVHUINWE
Contig 151
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 1511
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXNCLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 15341
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXNHKJXHCVKJXCHLVJCKXN
Contig 5151
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 354151
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 13251
CLBHJHBVKLJXCHKBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 15551
CLBHJHBVKLJXCHKJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 15881
CLBHJHBVKLJJNGWJKEBFUEWBFUEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN
Contig 156891
CLBHJHBVKLJXCHKJNGWJKEBFUEWEWBUFLHDKJNVJCXHJVKNCXJVHKJXHCVKJXCHLVJCKXN

注意:

  • 该命令使用正则表达式匹配 'Chr' 开头的行。
  • 该命令假设每个 'Chr' 开头的行后面都紧跟着至少一行内容。
  • 如果文件中有其他需要保留的换行符,则需要修改命令以适应实际情况。
Linux: 保留 Chr 开头行及其前一行换行符,删除其他换行符

原文地址: https://www.cveoy.top/t/topic/odX7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录