在 while 迴圈中命名輸出文件

在 while 迴圈中命名輸出文件

我有一個input.txt包含三列的文件

A B Z
C D Y
E F X

我想讀取前兩個字段,執行一些功能並用最後一個字段命名輸出。

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

我如何將其應用於更長的程式碼

input.sample.text以下三列

../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存在(並且是唯一的),並且不會混淆第三列是什麼,即第 1、2 和 3 列不應包含欄位分隔符號。

awk還允許您對前兩列進行多次操作。

答案2

您可以重定向命令組或任何形式的複合命令來重定向多個命令的輸出,無論它是否是 while 循環:

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

還要記住,在 POSIX shell 中,變數擴展需要加引號。

相關內容