次のコンテンツを含む100万行を超えるtxtファイルがあります(Match_nと「cggggg」の間のタブ)。
Sequence_1
Match_1 cggggg
Match_2 gggggc
Match_3 ggggcc
Match_4 cgggcc
Match_5 agggca
Match_6 agggta
Sequence_2
Match_1 tgggca
Match_2 aggggg
Match_3 gggggc
Match_4 ggggca
Sequence_3
Match_1 cggggt
Match_2 ggggtt
Match_3 tgggga
Match_4 ggggac
Match_5 cggggc
次の形式が必要です。
Sequence_1 Match_1 cggggg
Sequence_1 Match_2 gggggc
Sequence_1 Match_3 ggggcc
Sequence_1 Match_4 cgggcc
Sequence_1 Match_5 agggca
Sequence_1 Match_6 agggta
Sequence_2 Match_1 tgggca
Sequence_2 Match_2 aggggg
Sequence_2 Match_3 gggggc
Sequence_2 Match_4 ggggca
Sequence_3 Match_1 cggggt
Sequence_3 Match_2 ggggtt
Sequence_3 Match_3 tgggga
Sequence_3 Match_4 ggggac
Sequence_3 Match_5 cggggc
追加情報:合計10.000個の「Sequence_N」があり、各シーケンスには異なる「Match_n cggggc」数があります。
ありがとうございます! !
答え1
awk -v OFS='\t' 'NF==1{seq=$0; next} {print seq, $0}' file
答え2
Sequence
sedを使用すると、出会うすべての文字列を予約済みスペースに移動してから取り出すことができます。
sed -e '/^Sequence/{h;d;}' -e 'G;s/\(.*\)\n\(.*\)/\2\t\1/' file
Sequence
- の先頭位置を取得するには、いくつかの再配置が必要ですMatch
が、とにかく改行区切りを変更するために必要な交換にそれを組み込むことができます。
答え3
Perlを使用すると、次のことができます。
$ perl -nlE '
/^Seq/ ? ($h=$_) : say("$h\t$_")
' file
そしてsedを使用してください:
$ sed -ne ':a
/^Seq/{h;N;}
/\nSeq/D
s/\n/\t/p;g;$!ba
' file