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}'

もちろん、 が$3存在し (かつ一意である)、3 番目の列が何であるかに関して矛盾がないことを確認する必要があります。つまり、列 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 シェルでは変数の展開を引用符で囲む必要があることにも注意してください。

関連情報