Angenommen, ich habe 2 Dateien, ABC.txt
&PQR.txt
mit den unten gezeigten Daten als Beispiel:
ABC.txt:
ABC DEF
PQR.txt:
PQR XYZ
Ich möchte grep
Spalte 1 aus beiden Dateien und schreibe in eine dritte Textdatei. Wie kann das gemacht werden?
Meine erwartete Ausgabe ist (output.txt):
ABC PQR
Akzeptierte Antwort:
Hier sind ein paar Möglichkeiten:
-
Mit
paste
undcut
:$ paste -d ' ' <(cut -d' ' -f 1 ABC.txt ) <(cut -d' ' -f 1 PQR.txt ) > output.txt ABC PQR
Wenn Ihr System keine Prozesssubstitution unterstützt, verwenden Sie stattdessen Folgendes:
$ cut -d' ' -f 1 ABC.txt > /tmp/aa; cut -d' ' -f 1 PQR.txt > /tmp/bb; paste -d ' ' /tmp/aa /tmp/bb
-
Mit
awk
(danke @Costas):awk 'FNR==NR{a[FNR]=$1; next}{print a[FNR],$1}' ABC.txt PQR.txt > output.txt
Die spezielle Variable
FNR
ist die Zeilennummer der aktuellen Eingabedatei undNR
ist die Zeilennummer der Eingabe im Allgemeinen, unabhängig von der Datei, aus der sie stammt. Die beiden sind nur gleich, während die erste Eingabedatei gelesen wird. Die ersten Felder der ersten Datei werden also ima
gespeichert Array (a[FNR]=$1
), deren Schlüssel Zeilennummern und deren Werte die 1. Felder sind. Dann, wenn die zweite Datei erreicht ist, geben wir den Wert aus, der ihrer Zeilennummer entspricht (a[NR]
) und das 1. Feld der aktuellen Zeile.