whileループ内の出力ファイルの命名

whileループ内の出力ファイルの命名

input.txt3つの列を持つファイルがあります。

A B Z
C D Y
E F X

最初の2つのフィールドを読み、いくつかの機能を実行し、最後のフィールドとして出力名を指定したいと思います。

while IFS=" " read -r f1 f2 f3; do cat $f1 $f2 > $f3; done < file.txt

より長いコードにこれをどのように適用できますか?

input.sample.text次の3つの列があります。

../Data/G20P1sc-C05-R1.fastq.gz ../Data/G20P1sc-C05-R1.fastq.gz G20P1sc-C05
../Data/G20P1sc-C08-R1.fastq.gz ../Data/G20P1sc-C08-R1.fastq.gz G20P1sc-C08
 while IFS=" " read -r f1 f2 f3; do rsem-calculate-expression --star --star-path /share/pkg/star/2.7.0e/bin --temporary-folder --star-gzipped-read-file --paired-end $f1 $f2 ../genome_indices/rsem-star/rsem-star ../test_results/$f3; done < src_pdm3012/input.sample.text 

出力に次のエラーがあります。

EXITING: FATAL INPUT ERROR: empty value for parameter "outFileNamePrefix" in input "Command-Line-Initial"
SOLUTION: use non-empty value for this parameter

明示的に試してみましたが、--outFileNamePrefixまだ同じエラーが発生します。

while IFS=" " read -r f1 f2 f3; do rsem-calculate-expression --star --star-path /share/pkg/star/2.7.0e/bin --temporary-folder --star-gzipped-read-file --paired-end $f1 $f2 ../genome_indices/rsem-star/rsem-star --outFileNamePrefix $f3; done < ../src_pdm3012/input.sample.text

答え1

awkこれを行うには、スクリプトを使用することをお勧めします。

awk '{ print $1,$2 > $3}'

もちろん、$33番目の列が何であるか(そして固有であるか)混乱がないことを確認する必要があります。つまり、列1、2、3にはフィールド区切り文字を含めないでください。

awkまた、最初の2つの列に対して複数のタスクを実行できます。

答え2

whileループであるかどうかにかかわらず、複数のコマンドの出力をリダイレクトするために、コマンドグループまたはすべての形式の複合コマンドをリダイレクトできます。

while IFS=" " read -r f1 f2 f3; do
  {
    cat < "$f1"
    echo whatever
    cat < "$f2"
    echo end
  } > "$f3"
done < file.txt

また、POSIXシェルでは、変数の拡張に引用符が必要であることも覚えておいてください。

関連情報