いくつかのqsubを含むbashスクリプトがあります。それらのそれぞれは、開始する前に前の qsub が完了するのを待っています。
私の最初の qsub は、特定のディレクトリ内のファイルを perl プログラムに送信し、出力ファイルを新しいディレクトリに出力することで構成されています。最後に、すべてのジョブ名を配列にエコーします。このスクリプトは意図したとおりに機能します。
mkdir -p /perl_files_dir
for ID_FILES in `ls Infiles_dir/*.txt`;
do
JOB_ID=`echo "perl perl_scirpt.pl $ID_FILES" | qsub -j oe `
JOB_ID_ARRAY="${JOB_ID_ARRAY}:$JOB_ID"
done
echo $JOB_ID_ARRAY
私の 2 番目の qsub は、perl スクリプトで作成した以前のすべてのファイルを新しい出力ファイルに並べ替え、これらすべてのジョブ (約 100 ジョブ) が完了した後にdepend=afterany
. 繰り返しますが、この部分は正常に機能しています。
SORT_JOB=`echo "sort -m -n perl_files_dir/*.txt >>sorted_file.txt" | qsub -j oe -W depend=afterany$JOB_ID_ARRAY`
SORT_ARRAY="${SORT_ARRAY}:$SORT_JOB"
awk
私の問題は、ソートさsed
れたファイルに、削除したい列がいくつかあることです (2 から 6)。depend=afterany
SED=`echo "awk '{\$2="";\$3="";\$4="";\$5="";\$6=""; print \$0}' sorted_file.txt \
| sed 's/ //g' >final_file.txt" | qsub -j oe -W depend=afterany$SORT_ARRAY`
この最後のステップfinal_file.txt
で が作成されますが、空のままになります。エコーの前に追加SED=
したのは、そうしないとCommand not found
.
パイプなしで試したので、すべてが印刷されます。残念ながら、何も印刷されません。ソートされたファイルを開いていないと思います。これが、sedの後に最終ファイルが空になる理由です。もしそうなら、なぜ awk はそれを読まないのでしょうか?
私のスクリプトでは、変数を使用してディレクトリとファイルを (正しいパスで) 定義しています。ファイルやディレクトリは最初に完全に定義され、スクリプト全体で使用されるため、私の問題はファイルやディレクトリを見つけることではないことを私は知っています。変数の代わりにパス全体を書き込もうとしましたが、同じ結果が得られました。