Ich habe eine Datei input.txt
mit 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.text
hat 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 awk
ein Skript vor, um dies zu tun:
awk '{ print $1,$2 > $3}'
Natürlich müssen Sie sicher sein, dass $3
es 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.
awk
ermö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.