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:
paste file1.txt file2.txt | cut -f 1,2,3,6
Hier ist eine Möglichkeit, beide Dateien vorzufiltern, die auf der Substitution von ksh / bash / zsh-Prozessen beruhen.
paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
<(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')
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.
awk '
BEGIN {file2=ARGV[2]; ARGV[2]="";}
{$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt
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.
pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt