Text-Processing

如果下一行以模式開頭,則刪除行

  • May 17, 2020

如果一行不以“a”“c”“t”或“g”開頭,我想刪除它,下一行以“>”開頭。在以下範例中,“`>seq3”被刪除。

輸入:

>seq1
actgatgac
>seq2
ctgacgtca
>seq3
>seq4
gtagctagt
>seq5
tgacatgca

預期輸出:

>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca

我試過 sed ( sed '/^>.*/{$!N;/^>.*/!P;D}'and sed '/^>/{$d;N;/^[aA;cC;gG;tT]/!D}') 但沒有成功。

你可以嘗試這樣的事情:

$ sed -e '$!N;/^>.*\n>/D' -e 'P;D' file
>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca

那是

  • $!N用…維護一個兩行緩衝區P;D
  • 尋找一個以換行符開頭並在換行符之後>有另一個的模式>
  • 刪除到換行符

一個 awk 範例:

awk 'BEGIN {lasta="XXX"} {if ($0 !~ /^ *>/) printf("%s\n%s\n",lasta,$0);   lasta=$0;}'  fileNAME.txt

相當於

cat fileNAME.txt | awk 'BEGIN {lasta="XXX"} {if ($0 !~ /^ *>/) printf("%s\n%s\n",lasta,$0);   lasta=$0;}'

引用自:https://unix.stackexchange.com/questions/586151