2017-08-23 6 views
0

のブロックを削除するsedのデータはX13Y2とX12Y1が複製されたルールにPARA3とパラ4塩基を除去する方法この使用して重複したテキスト

Para1 
X12Y1 
AABBAABABA 
BBAAABABAB 
Para2 
X13Y2 
ABABAABAAB 
ABABABABAA 
Para3 
X13Y2 
BBBABABABA 
BABABABABA 
Para4 
X12Y1 
BBBABABABA 
BABABABABA 
Para5 
X20Y9 
BBBABABABA 
BABABABABA 

のように見えますか?

以下のように出力を希望:

Para1 
X12Y1 
AABBAABABA 
BBAAABABAB 
Para2 
X13Y2 
ABABAABAAB 
ABABABABAA 
Para5 
X20Y9 
BBBABABABA 
BABABABABA 
+0

すべてのレコードに4行が含まれていますか? – hek2mgl

答えて

0

awkのソリューション:

awk '/Para/{ p=$0 }/^X[0-9]/ && !a[$0]++{ rn=NR+2; printf "%s\n%s\n",p,$0; next }NR<=rn' file 

出力:

Para1 
X12Y1 
AABBAABABA 
BBAAABABAB 
Para2 
X13Y2 
ABABAABAAB 
ABABABABAA 
Para5 
X20Y9 
BBBABABABA 
BABABABABA 
0

これは(GNU SED)あなたのために働くかもしれない:

sed -r '/^Para/{N;H;N;N;x;s/^(.*)\n.*(\n.*)$/\2\1/;/^(\n[^\n]*)(\n.*)*(\1)/{x;d};x}' file 

Paraの先頭行に一致する場合は、インデックス(2行目)を保持スペース(HS)に追加し、次の2行をパターンスペース(PS)に追加し、HSにスワップしてインデックスを(改行で区切られた行の前に)、その索引がHSにすでに存在するかどうかを確認し、そうであればPSに戻してその項目を削除します。そうでなければ、PSにスワップしてその項目を出力します。

関連する問題