我在一个文件夹中有几千个文件。每个文件的内容如下所示。我在这个例子中的文件名是:AAB08704.1.fasta
>gi|1117824|gb|AAB08704.1| ecdysteroid regulated 16 kDa [Manduca sexta]
MLFYITVTVLLVSAQAKFYTDCGSKLATVQSVGVSGWPENARECVLKRNSNVTISIDFSPTTDVSAITTE
VHGVIMSLPVPFPCRSPDACKDNGLTCPIKAGVVANYKTTLPVLKSYPKVSVDVKWELKKDEEDLVCILI
PARIH
我想跳过第一行,然后将剩余的行合并为一行。我所有的文件都以“>”开头,这是标题信息,下面几行是我想合并成一行的序列信息。
我试过了
sed -i '2,$s/\n//g' AAB08704.1.fasta
我什至尝试使用以下方法将多行 fasta 转换为单行 fasta:
awk '/^>/ {printf("\n%s\n",$0);next; } { printf("%s",$0);} END {printf("\n");}' < AAB08704.1.fasta
这两个命令都没有达到我的预期。有线索吗?
预期输出:
>gi|1117824|gb|AAB08704.1| ecdysteroid regulated 16 kDa [Manduca sexta]
MLFYITVTVLLVSAQAKFYTDCGSKLATVQSVGVSGWPENARECVLKRNSNVTISIDFSPTTDVSAITTEVHGVIMSLPVPCRSPDACKDNGLTCPIKAGVVANYKTTLPVLKSYPKVSVDVKWELKKDEEDLVCILIPARIH
cat -A AAB08704.1.fasta 给出了这个:
M-oM-;M-?>gi|1117824|gb|AAB08704.1| ecdysteroid regulated 16 kDa [Manduca sexta]^M$
MLFYITVTVLLVSAQAKFYTDCGSKLATVQSVGVSGWPENARECVLKRNSNVTISIDFSPTTDVSAITTE^M$
VHGVIMSLPVPFPCRSPDACKDNGLTCPIKAGVVANYKTTLPVLKSYPKVSVDVKWELKKDEEDLVCILI^M$
最佳答案
使用 perl
$ perl -pe 's/\n// if $. > 1 && !eof' AAB08704.1.fasta
>gi|1117824|gb|AAB08704.1| ecdysteroid regulated 16 kDa [Manduca sexta]
MLFYITVTVLLVSAQAKFYTDCGSKLATVQSVGVSGWPENARECVLKRNSNVTISIDFSPTTDVSAITTEVHGVIMSLPVPFPCRSPDACKDNGLTCPIKAGVVANYKTTLPVLKSYPKVSVDVKWELKKDEEDLVCILIPARIH
s/\n//
移除换行符如果 $. > 1 && !eof
仅当行号大于 1 且不是文件结尾时
- 使用
perl -i -pe
进行就地编辑。参见 Command Switches-i
、-p
和-e
的文档
关于linux - 跳过标题将文件中的多行合并为单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653940/