如果一行和下一行以相同的模式开始,如何不打印一行?

我有一个 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

以上假设您没有>一行作为输入的最后一行。


以上是如果一行和下一行以相同的模式开始,如何不打印一行?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>