file1.csv
A,,C,D
A,,C,D
A,,C,D
A,,C,D
file2.csv
A,B
A,B
A,B
A,B
gewünschte Ausgabe.csv
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
Ich habe versucht, "verbinden" und "einfügen" ohne Erfolg. Gibt es einen Bash-Befehl, um dies zu tun? Die Spalte "A" ist in beiden .csv
Dateien gleich.
Antworten:
Mit nur
awk
Befehl:Holen Sie sich eine Zeile aus Datei1 und speichern Sie sie in der lokalen Variablen
f1
. Drucken Sie dann die Zeile, die in Datei1 gespeichert ist,f1
und drucken Sie schließlich das dritte ($3
) und$3
vierte ( ) Feld aus, das durch Komma,
getrennt ist Standard]) zu Komma (,
).Der Kurzbefehl würde so aussehen:
Fügen Sie die Datei2 ein, schneiden Sie dann die dritte Spalte aus und fügen Sie sie in die nächste (
-f3-
) von Datei1 ein.Mit
awk
undpaste
(Option A)Der folgende Befehl kopiert auch die letzten beiden Spalten (
C,D
) aus Datei1 am Ende jeder Zeile in Datei2:Obiger Befehl fügen Sie dann der file2 Inhalt ein Komma als Trennzeichen drucken (
-d','
) fügen Sie anschließend das zwei letzte Feld (NF
ist der Index des letzten Feldes und$NF
ist der String , den sein Index istNF
. Also$(NF-1)
das zweite Feld vor dem letzten Feld) von Datei1 , wenn dieser Index neu definiert oder teilt mit Komma Zuschauer (-F','
).Mit
awk
undpaste
(Option B)Dieser Befehl ist auch derselbe wie oben (
$3
und$4
zeigt auf das dritte und vierte Feld jeder Zeile aus Datei1):Oder eine andere Lösung mit
cut
Befehl:Befehl cut im obigen Befehl schneide zuerst das erste Feld (
-f1
das mit Komma-Trennzeichen (-d.
) indiziert wurde ) aus file1 (cut -d, -f1 file1
) aus, dann schneide das zweite Feld von file2 () aus und füge es abschließend aus und fügecut -d, -f2 file2
die dritte Spalte (-f3
) in die nächsten (-
) ein von file1 (cut -d, -f3- file1
) wieder.Dieser Befehl gibt auch das gleiche Ergebnis zurück:
Einfügen des zweiten Feldes aus Datei1 (
awk -F',' '{print $1}' file1
), Drucken eines Kommas (-d,
), Einfügen der zweiten Spalte aus Datei2 (awk -F',' '{print $2}' file2
) und erneutes Einfügen der zweiten und letzten Spalte von Datei1 (awk -F',' '{print $3","$4}' file1
).quelle
Hier ist eine Schönheit (denke ich):
In Schritten unterteilt:
Schritt 1. csvkit installieren:
Schritt 2. Verwenden Sie den Befehl join mit einem Komma als Trennzeichen
Schritt 3. Geben Sie die gewünschten Spalten ein. Beachten Sie, wie Sie die erste Spalte zweimal füttern, da dies diejenige ist, für die der Join tatsächlich ausgeführt wird (Standardverhalten von
join
).oder in Kurzform:
Sie können diese Standardausgabe bei Bedarf in eine Datei (desiredOutput) umleiten.
Vorteile
Dieses Verfahren hat mehrere Vorteile gegenüber den anderen vorgeschlagenen.
In erster Linie: Es führt eine echte Verknüpfung durch. Dies bedeutet, dass es auch für komplexere Daten verwendet werden kann. Es ist zum Beispiel sehr einfach, einen Join in einem anderen Feld durchzuführen. Es wird nicht nur die Position des Feldes betrachtet, sondern die Spalte wird wirklich berücksichtigt. Es funktioniert tatsächlich mit dem Format der Daten (csv) und behandelt sie nicht wie Text.
Zweitens wird das sehr leistungsfähige csv-Toolkit verwendet, mit dem Sie a) Statistiken mit einem Befehl anzeigen (
csvstats)
, b) überprüfen können, ob die Daten sauber sind (csvclean
), aber auch in json, in sql oder sogar laden können Python! Dieses Toolkit wird in der Datenwissenschaft häufig für die Datenaufbereitung verwendet.quelle
sudo apt-get install python-dev python-pip python-setuptools build-essential
- linkHier ist noch eine schöne. Ich denke, es ist der bisher einfachste aller Vorschläge.
Wenn Sie csvtool in der Vergangenheit noch nicht installiert haben, müssen Sie dies tun
sudo apt-get install csvtool
.Aus den Dokumenten:
Beachten Sie, wie wir in unserem Fall die zweiten Spalten der Dateien ersetzen.
Beispiele
file1.csv
file2.csv
Kombinieren der beiden Dateien:
Was Sie im Wesentlichen tun, ist das Einfügen der zweiten Spalte
file2.csv
als Spalte 2 infile1.csv
.Beachten Sie, dass dies auch für dasselbe Dokument funktioniert. Wenn Sie zwei Spalten austauschen möchten, können Sie dieselbe Datei wie input.csv und update.vsc verwenden.
quelle
So verschieben Sie eine ausgewählte Anzahl von Spalten von einer Datei in eine andere:
aus zwei Dateien:
file_1
file_2
Wenn Sie einstellen
cols = 1
:Aber wenn Sie einstellen
cols = 2
:cols = 3
:Wie benutzt man
Kopieren Sie es in eine leere Datei, den Pfad zu
file1
,file2
und die Anzahl der Spalten zu verschieben, speichern Sie es alsmove.py
und führen Sie es durch:Auf diese Weise können Sie auch eine oder mehrere Spalten aus der Mitte der Quellendateispalten hinzufügen.
quelle
import csv
gerne benutzt.Eine andere Methode in Python durch CSV-Modul.
script.py
Um das obige Skript auszuführen,
Ausgabe:
quelle