私はファイルに対して以下のコマンドを使用して、chr# (異なる染色体番号) に基づいて数行を抽出しています。これは、作業中の単一のファイルです。このようなファイルが 8 つあり、各ファイルに対して chr(1 から 22、次に chrX と chrY) に対してこれを行う必要があります。ループは使用せず、個別に実行しましたが、出力ごとにヘッダーをそのままにしておきたいと思います。個別に実行すると出力にヘッダーが含まれますが、8 つのファイルすべてに対してスクリプトをまとめて実行すると (スクリプト内で 8*24 のコマンドが次々に実行されるようなもの)、出力にヘッダーが含まれません。なぜこのようなことが起こるのか教えていただけますか?
#!/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
問題は、リダイレクトが 1 つのコマンドにしか影響しないことです。 と の出力をリダイレクトで取得するにはhead
、それらをグループ化する必要があります。 しかし、ここではおそらくこれがより良い選択です。grep
awk