パターンに一致する行を維持するために、後続の行のパターンに基づいてテキストファイルの行をフィルタリングしたいと思います。また、パターンに一致するファイルの名前を変更する必要があります。
たとえば、
>text chr1
AAA
BBA
AAA
>additional text chr2
ABA
AAA
CCC
TTT
>some text chr3
TTT
CCC
TCT
>no good text 1 3
AAA
CCC
TCT
>unimportant text 2 3 3
ACC
CCC
TCT
このコマンドは、「>」で始まる行に「chr」が含まれなくなるまで、「chr」を含む行と後続のすべての行を印刷します。
>chr1
AAA
BBA
AAA
>chr2
ABA
AAA
CCC
TTT
>chr3
TTT
CCC
TCT
答え1
私はawk、grep、sedを使ってこれを行います。元のファイルに末尾の空白がないとします。
awk 'NR>1&&/>/{print ""}{printf " %s", $0}END{print ""}' file |grep chr|sed 's/^ //' |sed 's/^.*chr/>chr/' |awk 'BEGIN{OFS="\n";}{print $1,$2,$3,$4}'
まずチャンクは「>」で始まり、各フィールドの前にスペースがあります。
>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT
>no good text 1 3 AAA CCC TCT
>unimportant text 2 3 3 ACC CCC TCT
次に、部分文字列「chr」を含む行をフィルタリングします。
>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT
第三に、すべての先行スペースを削除します。
>text chr1 AAA BBA AAA
>additional text chr2 ABA AAA CCC TTT
>some text chr3 TTT CCC TCT
第四に、"">"と"chr"の間のすべての文字を削除します。
>chr1 AAA BBA AAA
>chr2 ABA AAA CCC TTT
>chr3 TTT CCC TCT
最後に、awkを使用して、出力ファイルの区切り文字として「\ n」を含むすべての行を印刷します。
>chr1
AAA
BBA
AAA
>chr2
ABA
AAA
CCC
>chr3
TTT
CCC
TCT