Benennung der Ausgabedatei in einer While-Schleife

Benennung der Ausgabedatei in einer While-Schleife

Ich habe eine Datei input.txtmit drei Spalten

A B Z
C D Y
E F X

Ich möchte die ersten beiden Felder lesen, eine Funktion ausführen und die Ausgabe mit dem letzten Feld benennen.

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

Wie kann ich dies auf längere Codes anwenden?

das input.sample.texthat folgende drei Spalten

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

Die Ausgabe weist den folgenden Fehler auf

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

Ich versuche, das explizit zu verwenden --outFileNamePrefix, aber es tritt immer noch der gleiche Fehler auf.

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

Antwort1

Ich schlage awkein Skript vor, um dies zu tun:

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

Natürlich müssen Sie sicher sein, dass $3es existiert (und eindeutig ist) und dass es keine Unklarheiten darüber gibt, was die dritte Spalte ist, d. h. die Spalten 1, 2 und 3 sollten keine Feldtrennzeichen enthalten.

awkermöglicht Ihnen auch vielfältige Manipulationen der ersten beiden Spalten.

Antwort2

Sie können eine Befehlsgruppe oder jede Form eines zusammengesetzten Befehls umleiten, um die Ausgabe von mehr als einem Befehl umzuleiten, unabhängig davon, ob es sich um eine While-Schleife handelt oder nicht:

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

Denken Sie auch daran, dass Variablenerweiterungen in POSIX-Shells in Anführungszeichen gesetzt werden müssen.

verwandte Informationen