Linux 및 Bash 염색체 정렬 파일

Linux 및 Bash 염색체 정렬 파일

이 특정 방식으로 모든 파일을 게놈 데이터와 결합해야 합니다. 즉, 먼저 숫자순으로 정렬한 다음 알파벳순으로 정렬해야 합니다. 파일 이름은 다음과 같습니다.

Homo_sapiens.GRCh38.dna.chromosome.1.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.2.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.3.fa.gz 
etc.
Homo_sapiens.GRCh38.dna.chromosome.11.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.13.fa.gz
etc.
Homo_sapiens.GRCh38.dna.chromosome.X.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.Y.fa.gz

bash에서 가능한 한 간단하게 수행해야 합니다. 스크립트 등은 필요하지 않습니다. 다른 것들도 사용해 보았지만 sort -V여전히 작동하지 않습니다. 어떤 아이디어가 있나요? 8)

답변1

zsh껍질 에서 ,

print -l Homo_sapiens.GRCh38.dna.chromosome.*.fa.gz(n)

원하는 순서대로 파일을 인쇄합니다.

$ print -l Homo_sapiens.GRCh38.dna.chromosome.*.fa.gz(n)
Homo_sapiens.GRCh38.dna.chromosome.1.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.2.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.3.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.4.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.5.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.6.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.7.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.8.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.9.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.10.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.11.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.12.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.13.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.14.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.15.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.16.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.17.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.18.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.19.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.20.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.21.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.22.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.X.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.Y.fa.gz

마지막은 (n)전역 일치로 생성된 이름을 10진 정수로 정렬합니다. 마지막에는 사전순 X으로 유지 됩니다 Y.

하나의 파일로 결합하려면:

cat Homo_sapiens.GRCh38.dna.chromosome.*.fa.gz(n) >Homo_sapiens.GRCh38.dna.combined.fa.gz

내가 선택한 이름은 패턴과 일치하지 않으며 형식은 gzip이러한 유형의 연결을 허용합니다(압축된 결합 파일의 압축을 풀면 모든 결합 파일의 결합된 데이터가 제공됩니다). 압축해 놓으셨다면bgzip그럼 내가생각하다당신은 괜찮을 것입니다.

M또한 염색체 (미토콘드리아 및 배치되지 않은 비계) 가 있는 경우 Un일반적으로 마지막에 원하는 대로 정렬이 다소 엉망이 될 수 있습니다.

sort -t. -k5,5 -V(점으로 구분된 다섯 번째 필드에서 "버전 정렬" 수행)을 사용하여 이 정렬 순서를 얻을 수도 있습니다 . 반면 sort -V(정렬 필드를 지정하지 않음)은 염색체 번호 38가 아닌 염색체 번호를 기준으로 정렬됩니다.


존재하다 bash:

printf '%s\0' Homo_sapiens.GRCh38.dna.chromosome.*.fa.gz |
sort -z -t. -k5,5 -V |
xargs -0 cat >Homo_sapiens.GRCh38.dna.combined.fa.gz

그러면 모든 관련 파일 이름 목록이 생성되어 sort명령에 파이프됩니다(이미 설명했습니다). 정렬 후에는 xargs정렬된 이름을 읽고 호출하여 cat데이터를 결합합니다. 예제에 표시된 대로 출력이 새 파일에 기록됩니다 zsh.

파이프라인 전체에서 파일 이름은 null로 끝나는 문자열로 처리됩니다.

답변2

노력하다

ls | sort -V -d

그것은 돌아온다

Homo_sapiens.GRCh38.dna.chromosome.1.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.9.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.13.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.19.fa.gz
Homo_sapiens.GRCh38.dna.chromosome.X.fa.gz

-V마지막에 "X"를 기본적으로 처리해야 하고 번호 매기기가 시작되는 문자 앞의 점을 제거하면 작동하므로 옵션을 가지고 놀아 보았습니다 . 이유를 알고 싶습니다 :)

편집: 옵션이 올바르게 정렬되지 않은 이유는 -VGNU Coreutils의 웹 사이트에 나와 있습니다(우선, 번호가 매겨진/인덱스 버전에만 해당됩니다.

https://www.gnu.org/software/coreutils/manual/html_node/Details-about-version-sort.html

건배

관련 정보