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