Eu tenho um arquivo input.txt
com três colunas
A B Z
C D Y
E F X
Quero ler os dois primeiros campos, executar alguma função e nomear a saída com o último campo.
while IFS=" " read -r f1 f2 f3; do cat $f1 $f2 > $f3; done < file.txt
Como posso aplicar isso a códigos mais longos
o input.sample.text
tem as seguintes três colunas
../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
A saída tem o seguinte erro
EXITING: FATAL INPUT ERROR: empty value for parameter "outFileNamePrefix" in input "Command-Line-Initial"
SOLUTION: use non-empty value for this parameter
Tento usar explicitamente o --outFileNamePrefix
e ainda dá o mesmo erro
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
Responder1
Sugiro awk
script para fazer isso:
awk '{ print $1,$2 > $3}'
Claro que você deve ter certeza de que ela $3
existe (e é única) e que não há nenhuma dúvida sobre qual é a terceira coluna, ou seja, as colunas 1, 2 e 3 não devem conter separadores de campo.
awk
também permitirá muitas manipulações nas duas primeiras colunas.
Responder2
Você pode redirecionar um grupo de comandos ou qualquer forma de comando composto para redirecionar a saída de mais de um comando, seja um loop while ou não:
while IFS=" " read -r f1 f2 f3; do
{
cat < "$f1"
echo whatever
cat < "$f2"
echo end
} > "$f3"
done < file.txt
Lembre-se também de que em shells POSIX, as expansões de variáveis precisam ser citadas.