nombrar el archivo de salida en el bucle while

nombrar el archivo de salida en el bucle while

Tengo un archivo input.txtcon tres columnas.

A B Z
C D Y
E F X

Quiero leer los dos primeros campos, realizar alguna función y nombrar la salida con el último campo.

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

¿Cómo puedo aplicar esto a códigos más largos?

el input.sample.texttiene las siguientes tres columnas

../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 

La salida tiene el siguiente error.

EXITING: FATAL INPUT ERROR: empty value for parameter "outFileNamePrefix" in input "Command-Line-Initial"
SOLUTION: use non-empty value for this parameter

Intento usar explícitamente --outFileNamePrefixy todavía tiene el mismo error.

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

Respuesta1

Sugiero awkscript para hacer esto:

awk '{ print $1,$2 > $3}'

Por supuesto, debe asegurarse de que $3exista (y sea única) y de que no haya confusión sobre cuál es la tercera columna, es decir, las columnas 1, 2 y 3 no deben contener separadores de campos.

awkTambién le permitirá múltiples manipulaciones en las dos primeras columnas.

Respuesta2

Puede redirigir un grupo de comandos o cualquier forma de comando compuesto para redirigir la salida de más de un comando, ya sea un bucle while o no:

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

Recuerde también que en shells POSIX, las expansiones de variables deben citarse.

información relacionada