Wie erstelle ich mit awk eine neue Datei, in der ausgewählte Spalten aus zwei separaten Dateien zusammengeführt werden? Ohne die Elementreihenfolge von BEIDEN Dateien durcheinander zu bringen.
Beispiel: Datei 3 kann Spalte 1,2,3 aus Datei 1 und Spalte 4 aus Datei 2 enthalten.
File 1
A 23 8 T
A 63 9 9
B 45 3 J
File 2
A 0
A 6
B 5
File 3
A 23 8 0
A 63 9 6
B 45 3 5
text-processing
awk
columns
Dova
quelle
quelle
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
paste file1 file2
ausgewählte Felder verwenden und dann ausdruckenawk
.file2
im Speicher, was bei großen Dateien unzulässig sein kann. Es gibt einen einfacheren Weg, dies ohne den Speicheraufwand zu tun (siehe meine Antwort).Dafür gibt es ein spezielles Tool :
paste
. Es verkettet jede vollständige Zeile aus der ersten Datei mit der entsprechenden Zeile aus der zweiten Datei. Sie können unerwünschte Spalten vorher oder nachher entfernen. Angenommen, Ihre Spalten sind durch Tabulatoren getrennt:Hier ist eine Möglichkeit, beide Dateien vorzufiltern, die auf der Substitution von ksh / bash / zsh-Prozessen beruhen.
Awk ist in erster Linie darauf ausgerichtet, jeweils eine Datei zu verarbeiten. Sie können jedoch auch aufrufen
getline
, um parallel aus einer anderen Datei zu lesen.Bisher habe ich angenommen, dass Sie Zeile 1 von Datei 1 mit Zeile 1 von Datei 2, Zeile 2 von Datei 1 mit Zeile 2 von Datei 2 usw. abgleichen möchten. Wenn Sie den Inhalt einer Spalte abgleichen möchten, ist dies a ganz andere Sache.
join
erledigt den Job, vorausgesetzt, die Spalte, mit der Sie übereinstimmen möchten, ist sortiert.quelle