Linux: 保留 Chr 开头行及其前一行换行符,删除其他换行符
以下命令使用 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' 开头的行后面都紧跟着至少一行内容。
- 如果文件中有其他需要保留的换行符,则需要修改命令以适应实际情况。
原文地址: https://www.cveoy.top/t/topic/odX7 著作权归作者所有。请勿转载和采集!