다음 콘텐츠가 포함된 1백만 줄이 넘는 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