наименование выходного файла в цикле 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 расширения переменных необходимо заключать в кавычки.

Связанный контент