chr#(다른 염색체 번호)을 기반으로 몇 줄을 추출하기 위해 파일에서 아래 명령을 사용하고 있습니다. 이것은 현재 작업 중인 단일 파일입니다. 나는 8개의 파일을 가지고 있고 각 파일에 대해 chr(1to 22, chrX 및 chrY)에 대해 이 작업을 수행해야 합니다. 루프를 사용하지 않고 개별적으로 수행했지만 헤더를 그대로 유지하려는 경우 내 출력 각각. 개별적으로 실행하면 출력에 헤더가 표시되지만 실행 중이지만 스크립트의 8*24 명령과 같이 8개 파일 모두에 대해 스크립트를 차례로 실행하면 출력에 헤더가 없습니다. 왜 이런 일이 일어나는지 말해 줄 수 있나요?
#!/bin/sh
#
#$ -N DOC_gatk_chr
#$ -cwd
#$ -e err_DOC_gatk_chr.txt
#$ -o out_DOC_gatk_chr.txt
#$ -S /bin/sh
#$ -M [email protected]
#$ -m bea
#$ -l h_vmem=25G
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr1" > S_313_IPS_S7995.chr1.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr2" > S_313_IPS_S7995.chr2.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr3" > S_313_IPS_S7995.chr3.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr4" > S_313_IPS_S7995.chr4.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr5" > S_313_IPS_S7995.chr5.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr6" > S_313_IPS_S7995.chr6.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr7" > S_313_IPS_S7995.chr7.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr8" > S_313_IPS_S7995.chr8.coverage
more S_313_IPS_S7995.coverage.sample_interval_summary | head -n1; more S_313_IPS_S7995.coverage.sample_interval_summary | grep "chr9" > S_313_IPS_S7995.chr9.coverage
스크립트의 구조가 위와 같도록 qsub를 사용하여 작업으로 실행하고 있습니다. 명령을 개별적으로 실행하면 작동하지만 이렇게 실행하면 헤더가 출력 파일 ';'에 인쇄되지 않습니다. 인식되지 않는 것 같습니다. qsub filename.sh와 sh filename.sh를 모두 사용하여 실행해 보았습니다. sh filename.sh를 사용하면 헤더가 콘솔에 인쇄되는 것을 발견했습니다. 그러니 확실히 ';' 이전의 명령은 다음과 같습니다. 세미콜론이 파일에 기록되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
원하는 출력:
Target total_coverage average_coverage IPS_S7995_total_cvg IPS_S7995_mean_cvg IPS_S7995_granular_Q1 IPS_S7995_granular_median IPS_S7995_granular_Q3 IPS_S7995_%_above_15
chr2:41460-41683 14271 63.71 14271 63.71 56 67 79 100.0
chr2:45338-46352 123888 122.06 123888 122.06 79 123 147 94.6
chr2:218731-218983 11653 46.06 11653 46.06 36 50 55 100.0
chr2:224825-225012 12319 65.53 12319 65.53 57 68 76 100.0
chr2:229912-230090 20983 117.22 20983 117.22 93 120 147 100.0
chr2:230947-231137 22386 117.20 22386 117.20 100 120 139 100.0
chr2:233074-233258 11710 63.30 11710 63.30 54 66 73 100.0
chr2:234086-234300 22952 106.75 22952 106.75 91 113 126 100.0
chr2:242747-242922 20496 116.45 20496 116.45 93 124 142 100.0
chr2:243469-243671 27074 133.37 27074 133.37 126 138 148 100.0
하지만 출력은 헤더 없이 아래에 있습니다.
chr2:41460-41683 14271 63.71 14271 63.71 56 67 79 100.0
chr2:45338-46352 123888 122.06 123888 122.06 79 123 147 94.6
chr2:218731-218983 11653 46.06 11653 46.06 36 50 55 100.0
chr2:224825-225012 12319 65.53 12319 65.53 57 68 76 100.0
chr2:229912-230090 20983 117.22 20983 117.22 93 120 147 100.0
chr2:230947-231137 22386 117.20 22386 117.20 100 120 139 100.0
chr2:233074-233258 11710 63.30 11710 63.30 54 66 73 100.0
chr2:234086-234300 22952 106.75 22952 106.75 91 113 126 100.0
chr2:242747-242922 20496 116.45 20496 116.45 93 124 142 100.0
chr2:243469-243671 27074 133.37 27074 133.37 126 138 148 100.0
답변1
다음과 같은 것이 필요합니다.
{ head -n1 S_313_IPS_S7995.coverage.sample_interval_summary;
grep "chr1" S_313_IPS_S7995.coverage.sample_interval_summary; } >S_313_IPS_S7995.chr1.coverage
또는
awk 'NR==1 || /chr1/' S_313_IPS_S7995.coverage.sample_interval_summary >S_313_IPS_S7995.chr1.coverage
문제는 리디렉션이 하나의 명령에만 영향을 미친다는 것입니다. 리디렉션의 출력을 얻으려면 그룹화해야 head
합니다 . grep
그러나 awk
아마도 여기서 더 나은 선택일 것입니다.