이 특정 방식으로 모든 파일을 게놈 데이터와 결합해야 합니다. 즉, 먼저 숫자순으로 정렬한 다음 알파벳순으로 정렬해야 합니다. 파일 이름은 다음과 같습니다.
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"를 기본적으로 처리해야 하고 번호 매기기가 시작되는 문자 앞의 점을 제거하면 작동하므로 옵션을 가지고 놀아 보았습니다 . 이유를 알고 싶습니다 :)
편집: 옵션이 올바르게 정렬되지 않은 이유는 -V
GNU Coreutils의 웹 사이트에 나와 있습니다(우선, 번호가 매겨진/인덱스 버전에만 해당됩니다.
https://www.gnu.org/software/coreutils/manual/html_node/Details-about-version-sort.html
건배