如果一行和下一行以相同的模式开始,如何不打印一行?
我有一个 file.fa:
>ABC
TGTGTGT
AGAGAGA
TGTAGTA
>BDC
>DTR
>EDF
AGAGGTG
AGTGACA
CAGTGAC
我想保留没有 ">" 的行,只有在紧随其后的行没有 ">" 时才保留带有 ">" 的行:
>ABC
TGTGTGT
AGAGAGA
TGTAGTA
>EDF
AGAGGTG
AGTGACA
CAGTGAC
查看这篇文章的答案,我看到awk '/^>/{x=$0} !/^>/{if(x){print x;x=0;}}' file.fa
打印出我想要的标题行(带有“>”):
>ABC
>EDF
但是我如何获得没有“>”的文本行?
回答
使用sed
:
$ sed '/^>/ { N; /n>/ D; }' input.txt
>ABC
TGTGTGT
AGAGAGA
TGTAGTA
>EDF
AGAGGTG
AGTGACA
CAGTGAC
如果一行以 开头>
,请阅读下一行并将其附加到模式空间。如果它也以 开头>
,则删除模式空间的第一行,然后将刚刚读取的第二行作为新的输入行进行查看。打印所有其他内容。
回答
您可以使用:
awk '!/^>/ {if (prev != "") print prev; print; prev=""}
/^>/ {prev = $0}' file
>ABC
TGTGTGT
AGAGAGA
TGTAGTA
>EDF
AGAGGTG
AGTGACA
CAGTGAC
回答
$ awk '!/>/{print p $0; p=""; next} {p=$0 ORS}' file
>ABC
TGTGTGT
AGAGAGA
TGTAGTA
>EDF
AGAGGTG
AGTGACA
CAGTGAC
以上假设您没有>
一行作为输入的最后一行。