나는FASTA 형식문서:
>Ipunensis_00386 Yfr1
GCGGAGACGAAAGTTTCCGTTCACTCCTCACACCACACTCCGCCCAAATCATTGATTTGG
GCGGTT
>Ipunensis_00401 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
GCGTTACCCGCT
>Ipunensis_00001 transposase IS4 family protein
ATGCAGAAGTTTCAGGGCATCCACTGGGTCAACCTAGACGGGCAGCACCAGGTTAGCAAT
CTCAGTGATGAGCGACGCTTAATCATCCACCTCTTGGGGCCACCTGTTGAGCGCTACTAC
CATGCCCCTGGTTAA
>Ipunensis_00002 Photosystem I assembly protein Ycf3
ATGCGTCACCCCGCCAAGTTACTCGGGTTAGTCACTCTCACCAGTATGCTTACGCTGGCT
>Ipunensis_00003 Cell wall-associated protease
ATGAAACGTTTTCTGACCAGTCTTTTGCTGACGGGCCTGCTTTGGCATAGTGGGGGCAGC
GTTGGGGTTGGGAGAGGTGCGATCGCACAAACCCAGTCCACCCCAGACCTCTACTACACC
>Ipunensis_00004 Photosystem I assembly protein Ycf3
TTGACCTGCGGCCCGCAGCCCTACCTGCCCAACCTGACTCCAGAAATTCCCATGATCTAC
CGCCTCTCGTCTCCCGGATTTTTGCTGGCGCTGCTGCTGCTATCTGCCGTCGATCCGGCA
>Ipunensis_00226 tRNA-Leu(gag)
TGCGGATGTGGTGGAACTGGTAGACACGCACGTTTGAGGGGCGTGTGGCTTACGCCTTGC
GAGTTCGAGTCTCGCCATCCGCAT
>Ipunensis_00045 tRNA-Ala(cgc)
GGGGAATTAGCTCAGCTGGTAGAGCGCTGCGATCGCACCGCAGAGGTCAGGAGTTCGAAT
CTCCTATTCTCCA
>Ipunensis_00357 glnA
ATCGTTCATCTCTTCAAACTGTCAAAGCTACTTACAAAAGCTACAGACGCACCAAGAGAC
GGAAGTAGGGGTCTGATCCCCCCGAAGGAACGCGCC
>Ipunensis_00403 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
위의 fasta 파일을 영숫자 ID를 기준으로 정렬하는 방법: >Ipunensis_00001로 시작하는 등.
원하는 출력:
>Ipunensis_00001 transposase IS4 family protein
ATGCAGAAGTTTCAGGGCATCCACTGGGTCAACCTAGACGGGCAGCACCAGGTTAGCAAT
CTCAGTGATGAGCGACGCTTAATCATCCACCTCTTGGGGCCACCTGTTGAGCGCTACTAC
CATGCCCCTGGTTAA
>Ipunensis_00002 Photosystem I assembly protein Ycf3
ATGCGTCACCCCGCCAAGTTACTCGGGTTAGTCACTCTCACCAGTATGCTTACGCTGGCT
>Ipunensis_00003 Cell wall-associated protease
ATGAAACGTTTTCTGACCAGTCTTTTGCTGACGGGCCTGCTTTGGCATAGTGGGGGCAGC
GTTGGGGTTGGGAGAGGTGCGATCGCACAAACCCAGTCCACCCCAGACCTCTACTACACC
>Ipunensis_00004 Photosystem I assembly protein Ycf3
TTGACCTGCGGCCCGCAGCCCTACCTGCCCAACCTGACTCCAGAAATTCCCATGATCTAC
CGCCTCTCGTCTCCCGGATTTTTGCTGGCGCTGCTGCTGCTATCTGCCGTCGATCCGGCA
>Ipunensis_00045 tRNA-Ala(cgc)
GGGGAATTAGCTCAGCTGGTAGAGCGCTGCGATCGCACCGCAGAGGTCAGGAGTTCGAAT
CTCCTATTCTCCA
>Ipunensis_00226 tRNA-Leu(gag)
TGCGGATGTGGTGGAACTGGTAGACACGCACGTTTGAGGGGCGTGTGGCTTACGCCTTGC
GAGTTCGAGTCTCGCCATCCGCAT
>Ipunensis_00357 glnA
ATCGTTCATCTCTTCAAACTGTCAAAGCTACTTACAAAAGCTACAGACGCACCAAGAGAC
GGAAGTAGGGGTCTGATCCCCCCGAAGGAACGCGCC
>Ipunensis_00386 Yfr1
GCGGAGACGAAAGTTTCCGTTCACTCCTCACACCACACTCCGCCCAAATCATTGATTTGG
GCGGTT
>Ipunensis_00401 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
GCGTTACCCGCT
>Ipunensis_00403 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
답변1
파일에 null 바이트가 없다고 가정하고 GNU sort & sed를 사용합니다.
sed 's/^>/\x00&/' file | sort -z | tr -d '\0'
이는 널 바이트로 시작하는 블록을 널 바이트로 분리한 다음 >
GNU sort 의 -z
/ 옵션을 사용하여 --zero-terminated
사전순으로 레코드를 정렬한 다음 tr
널 바이트를 제거합니다.
답변2
GNU
sort
와 POSIX를 사용awk
하고 다음을 수행하십시오cut
.awk '/^>/{key=$1} {print key, $0}' file | sort -k1,1 -s | cut -d' ' -f2-
-s
이는 원래 줄 번호를 인쇄하고 다음 예와 같이 추가로 정렬할 필요 없이 GNU 정렬("안정적인 정렬") 옵션을 사용하여 각 블록 내의 원래 줄 순서가 유지되도록 할 수 있기 때문에 작동합니다 .또는 모든 POSIX/표준 UNIX 도구를 사용하십시오.
awk '/^>/{key=$1} {print key, NR, $0}' file | sort -k1,1 -k2,2n | cut -d' ' -f3-
이것의 장점은 모든 UNIX 시스템에서 작동한다는 것입니다.
위의 두 가지 방법 모두 아래 방법에 비해 장점이 있습니다 gawk
. 유일한 대안은 awk
전체 입력 파일을 메모리에 저장할 필요가 없으므로 많은 수의 입력 파일에도 작동합니다. sort
파이프라인의 파일만 전체 파일을 처리해야 하며 다음을 사용합니다. 요청 페이지 매김 등이 이를 수행할 수 있습니다.
마지막으로 GNU awk를 사용하십시오
sorted_in
(참조:https://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning):awk ' /^>/{key=$1} {vals[key]=vals[key] $0 ORS} END { PROCINFO["sorted_in"]="@ind_str_asc"; for (key in vals) printf "%s", vals[key] } ' file
더 큰 스크립트의 중간에 실행하는 경우 마지막 것이 실제로 더 나은 선택이므로
awk
정렬을 위해 외부 셸 도구를 사용하는 것은 이상적인 선택이 아닙니다.
답변3
이는 다음과 같은 기본 아이디어이다.손님이 참 \0
똑똑 하네요, 그러나 GNU 도구는 필요하지 않습니다.
$ perl -pe '/>/ ? s/\n/\t/ : s/\n//; ' foo.fa | sort | perl -pe 's/(?<=.)>/\n>/g; y/\t/\n/' | fold -w 60
>Ipunensis_00386 Yfr1
GCGGAGACGAAAGTTTCCGTTCACTCCTCACACCACACTCCGCCCAAATCATTGATTTGG
GCGGTT
>Ipunensis_00401 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
GCGTTACCCGCT
>Ipunensis_00001 transposase IS4 family protein
ATGCAGAAGTTTCAGGGCATCCACTGGGTCAACCTAGACGGGCAGCACCAGGTTAGCAAT
CTCAGTGATGAGCGACGCTTAATCATCCACCTCTTGGGGCCACCTGTTGAGCGCTACTAC
CATGCCCCTGGTTAA
>Ipunensis_00002 Photosystem I assembly protein Ycf3
ATGCGTCACCCCGCCAAGTTACTCGGGTTAGTCACTCTCACCAGTATGCTTACGCTGGCT
>Ipunensis_00003 Cell wall-associated protease
ATGAAACGTTTTCTGACCAGTCTTTTGCTGACGGGCCTGCTTTGGCATAGTGGGGGCAGC
GTTGGGGTTGGGAGAGGTGCGATCGCACAAACCCAGTCCACCCCAGACCTCTACTACACC
>Ipunensis_00004 Photosystem I assembly protein Ycf3
TTGACCTGCGGCCCGCAGCCCTACCTGCCCAACCTGACTCCAGAAATTCCCATGATCTAC
CGCCTCTCGTCTCCCGGATTTTTGCTGGCGCTGCTGCTGCTATCTGCCGTCGATCCGGCA
>Ipunensis_00226 tRNA-Leu(gag)
TGCGGATGTGGTGGAACTGGTAGACACGCACGTTTGAGGGGCGTGTGGCTTACGCCTTGC
GAGTTCGAGTCTCGCCATCCGCAT
>Ipunensis_00045 tRNA-Ala(cgc)
GGGGAATTAGCTCAGCTGGTAGAGCGCTGCGATCGCACCGCAGAGGTCAGGAGTTCGAAT
CTCCTATTCTCCA
>Ipunensis_00357 glnA
ATCGTTCATCTCTTCAAACTGTCAAAGCTACTTACAAAAGCTACAGACGCACCAAGAGAC
GGAAGTAGGGGTCTGATCCCCCCGAAGGAACGCGCC
>Ipunensis_00403 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
설명하다
첫 번째 명령은 perl
개행을 a가 포함된 행으로 바꾸고, 그렇지 않은 행에서는 아무것도 바꾸지 않습니다. 이렇게 하면 ID와 시퀀스가 탭으로 구분되어 같은 줄에 배치됩니다.\t
>
그런 다음 이것은 개행 문자를 대체 sort
하는 두 번째 perl 로 전달됩니다 >
. 단, 앞에 다른 문자가 있는 경우에만 가능합니다(첫 번째 항목 앞에 추가 개행 문자를 추가하는 것을 방지하기 위해). 이것은 fasta와 같은 형식으로 다시 변환됩니다.
마지막으로 출력을 전달하여 fold -w 60
표준 60자 fasta 형식을 얻습니다. 그러나 ID 줄이 60자를 초과하는 경우 ID 줄도 축소됩니다. 이것이 문제라면 이 두 가지를 시도해 보세요. awk
이것이 문제라면 제 것을 시도해 보세요.이전에 게시됨그리고 다음을 수행하십시오:
$ FastaToTbl foo.fa | sort | TblToFasta
>Ipunensis_00001 transposase IS4 family protein
ATGCAGAAGTTTCAGGGCATCCACTGGGTCAACCTAGACGGGCAGCACCAGGTTAGCAAT
CTCAGTGATGAGCGACGCTTAATCATCCACCTCTTGGGGCCACCTGTTGAGCGCTACTAC
CATGCCCCTGGTTAA
>Ipunensis_00002 Photosystem I assembly protein Ycf3
ATGCGTCACCCCGCCAAGTTACTCGGGTTAGTCACTCTCACCAGTATGCTTACGCTGGCT
>Ipunensis_00003 Cell wall-associated protease
ATGAAACGTTTTCTGACCAGTCTTTTGCTGACGGGCCTGCTTTGGCATAGTGGGGGCAGC
GTTGGGGTTGGGAGAGGTGCGATCGCACAAACCCAGTCCACCCCAGACCTCTACTACACC
>Ipunensis_00004 Photosystem I assembly protein Ycf3
TTGACCTGCGGCCCGCAGCCCTACCTGCCCAACCTGACTCCAGAAATTCCCATGATCTAC
CGCCTCTCGTCTCCCGGATTTTTGCTGGCGCTGCTGCTGCTATCTGCCGTCGATCCGGCA
>Ipunensis_00045 tRNA-Ala(cgc)
GGGGAATTAGCTCAGCTGGTAGAGCGCTGCGATCGCACCGCAGAGGTCAGGAGTTCGAAT
CTCCTATTCTCCA
>Ipunensis_00226 tRNA-Leu(gag)
TGCGGATGTGGTGGAACTGGTAGACACGCACGTTTGAGGGGCGTGTGGCTTACGCCTTGC
GAGTTCGAGTCTCGCCATCCGCAT
>Ipunensis_00357 glnA
ATCGTTCATCTCTTCAAACTGTCAAAGCTACTTACAAAAGCTACAGACGCACCAAGAGAC
GGAAGTAGGGGTCTGATCCCCCCGAAGGAACGCGCC
>Ipunensis_00386 Yfr1
GCGGAGACGAAAGTTTCCGTTCACTCCTCACACCACACTCCGCCCAAATCATTGATTTGG
GCGGTT
>Ipunensis_00401 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC
GCGTTACCCGCT
>Ipunensis_00403 tRNA-Gly(gcc)
GCGGGTATAGCTCAGTGGTAGAGCGTCACCTTGCCAAGGTGAATGTCGCGCGTTCGAATC