Ich habe zwei Dateien, aus denen ich eine dritte erstellen möchte, die alle Informationen enthält.
Datei 1:
a 111
b 222
c 333
d 666
e 777
Datei 2:
111 x1
222 x2
333 x3
444 x4
555 x5
666 x6
777 x7
888 x8
Ich möchte sie wie folgt kombinieren:
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
Hinweis:
Die zweite Spalte von Datei 1 ist eine Teilmenge der ersten Spalte von Datei 2
command-line
text-processing
gforce89
quelle
quelle
-e0
brauchen Sie kein Perl :)Verwenden von join:
Der Befehl join verbindet die Zeilen zweier Dateien, die ein gemeinsames Datenfeld verwenden. In diesem Fall: Verbinden Sie die Datei2 und die Datei1 mit dem Feld 1 (
-1 1
) der Datei2 und dem Feld 2 (-2 2
) der Datei1.Die Ausgabe lautet: "Verbundenes Feld, Feld 2 von Datei2, Feld 1 von Datei1" (
-o'0,1.2,2.1'
), wenn ein Feld fehlt, setzen Sie 0 (-e0
)Wenn eine der beiden Dateien mehr Datensätze enthält, fügen Sie diese hinzu (in diesem Fall file2) (
-a1
)Bitte beziehen Sie sich auf die Manpage des Befehls join
quelle
Ein bisschen
awk
Magie:oder
Ausgabe
Erläuterung
FNR==NR{a[$2]=$1;next}
Läuft über
file1
(FNR==NR
) und erstellt eine Schlüsselwertstruktur. Der Schlüssel ist die zweite Spalte ($2
) vonfile1
, der Wert ist die erste Spalte ($1
) vonfile1
{if(a[$1]==""){a[$1]=0};print $1,$2,a[$1]}
Läuft über
file2
undif(a[$1]==""){a[$1]=0}
Wenn der Schlüssel in der ersten Spalte (
$1
) infile2
nicht vorhanden istfile1
, benötigen wir a0
print $1,$2,a[$1]
Drucken (unter Verwendung
print
) der ersten und zweiten Spalte vonfile2
und des Werts der Schlüsselwertstruktur mit dem Schlüssel der ersten Spalte ($1
) vonfile2
oder
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'
Drucken (unter Verwendung
printf
) der ersten und zweiten Spalte vonfile2
und des Werts der Schlüsselwertstruktur mit dem Schlüssel der ersten Spalte ($1
) vonfile2
.FS
ist das Trennzeichen zwischen den Spalten aus der Eingabedatei"%s%s%s%s%s\n"
ist die Formatierung für die Ausgabe
%s
- String\n
- Neue Zeilequelle
Verwenden von q :
Auf diese Weise kann es manchmal besser lesbar sein.
quelle
q
ist im Paketpython3-q-text-as-data
(Python 3) und im Paketpython-q-text-as-data
(Python 2).q
Paket bekommen? Ich scheine nicht in der Lage sein , zu installieren entwederpython-q-text-as-data
oderpython3-q-text-as-data
. "E: Paket python3-q-text-as-data konnte nicht gefunden werden". Mein System bereits installiertpython
,python2.7
,python3
, undpython3.4
.