Angenommen, Sie haben eine CSV-Datei mit zwei Feldern: ID und E-Mail. Sie haben eine andere Datei mit 2 Feldern: E-Mail und Name. Wie können Sie eine Datei mit allen drei per E-Mail verbundenen Feldern erstellen?
Ein bisschen mehr Details zum Join (dh inner, äußer, links). Ist die E-Mail-Liste in der 1. CSV identisch mit der zweiten Liste? Oder enthält man mehr?
Hyperslug
Beispiele für die CSV-Dateien wären hilfreich, zusammen mit dem Betriebssystem, das Sie verwenden?
Troggy
Ich denke, 1. und 2. Liste sind identisch. Ich benutze Linux. Bitte helfen Sie !!! Vielen Dank!! :)
crst53
1
Wie groß sind die Daten?
Joshua
Antworten:
24
Revision3 :
Sie müssen beide Listen in E-Mails alphabetisch sortieren und dann beitreten. Vorausgesetzt, dass das E-Mail-Feld das 2. Feld von Datei1 und das 1. Feld von Datei2 ist:
CSV ist komplizierter. Das Feldtrennzeichen kann beispielsweise ausgeblendet werden.
Pguardiario
@hyperslug Kann ich einen vollständigen Outer Join durchführen?
Abu Shoeb
Dies funktioniert nicht, wenn die CSV mit oder ohne Anführungszeichen gemischt ist und die ID ein Komma enthält. Verwenden Sie diese Lösung nur für die einmalige Verarbeitung, bei der Sie das Ergebnis überprüfen. Ich empfehle jedoch, es nicht für ein Skript auf Produktionsebene zu verwenden.
tolles Werkzeug. Sogar erkannt, dass eine meiner Dateien ein anderes Trennzeichen als "," hat.
D_K
6
Vielleicht ist es übertrieben, aber Sie können zwei Arten von Tabellen in eine Datenbank (z. B. OpenOffice Base) importieren und einen Bericht definieren, der die gewünschte Ausgabe darstellt.
Wenn der CSV-Import ein Problem darstellt, kann ein Tabellenkalkulationsprogramm (z. B. OpenOffice Calc) den Import durchführen. Das Ergebnis kann dann einfach in die Datenbank übertragen werden.
Als zukünftige Referenz möchten Sie vielleicht mit AWK herumspielen . Es ist eine sehr einfache kleine Skriptsprache, die in irgendeiner Form auf jedem * nix-System vorhanden ist. Ihre einzige Mission ist, dass das Leben aus der Manipulation von Standard-Textdatenbanken mit Trennzeichen besteht. Mit ein paar Zeilen Wegwerf-Skript können Sie einige sehr nützliche Dinge tun. Die Sprache ist klein und elegant und hat ein besseres Nutzen / Komplexitäts-Verhältnis als alles andere, was mir bekannt ist.
Perl ist in vielerlei Hinsicht ein Nachfolger von awk.
Reinierpost
awk kümmert sich meines Wissens nicht um Anführungszeichen und Escapezeichen (z. B. Umgang mit, s in einer, getrennten CSV-Datei). Wenn Sie dies benötigen, ist die Verwendung einer dedizierten CSV-Verarbeitungsbibliothek einfacher. Sie existieren für viele Sprachen.
package main
import (
"flag"
"os"
"github.com/chrislusf/gleam"
"github.com/chrislusf/gleam/source/csv"
)
var (
aFile = flag.String("a", "a.csv", "first csv file with 2 fields, the first one being the key")
bFile = flag.String("b", "b.csv", "second csv file with 2 fields, the first one being the key")
)
func main() {
flag.Parse()
f := gleam.New()
a := f.Input(csv.New(*aFile))
b := f.Input(csv.New(*bFile))
a.Join(b).Fprintf(os.Stdout, "%s,%s,%s\n").Run()
}
Es nimmt CSV-Dateien als SQL-Tabellen und lässt dann SQL-Abfragen zu, was zu einer anderen CSV- oder JSON-Datei führt.
Für Ihren Fall rufen Sie einfach an:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
Das Tool benötigt Java 8 oder höher.
Einige der Vorteile:
Sie erhalten wirklich CSV-Unterstützung, nicht nur "Nehmen wir an, die Daten sind korrekt".
Sie können an mehreren Schlüsseln teilnehmen.
Einfacher zu bedienen und zu verstehen als joinLösungen auf der Basis von.
Sie können mehr als 2 CSV-Dateien kombinieren.
Sie können durch SQL-Ausdrücke verbinden - die Werte müssen nicht identisch sein.
Haftungsausschluss: Ich habe dieses Tool geschrieben. Früher war es nach dem Schließen von Google Code nicht mehr in Ordnung, aber ich habe es wiederbelebt und neue Funktionen hinzugefügt, während ich es verwende.
Sie können die CSV-Datei mit einem Tabellenkalkulationsprogramm wie LibreOffice lesen und mithilfe eines VLOOKUP()Makros nach dem Namen in der zweiten Datei suchen.
Die Dateierweiterung xlsx impliziert Microsoft Excel, und ich denke, dass VLOOKUP dies auch tut. Diese Frage ist mit Linux getaggt. Gibt es Microsoft Excel für Linux?
Sie können auch ein Tool verwenden, das speziell für das Verknüpfen von CSV-Dateien entwickelt wurde, z. B. das Tool unter https://filerefinery.com
Folgende Operationen werden derzeit unterstützt: Verknüpfen von CSV-Dateien. Es ist möglich, das SQL-Äquivalent der äußeren, inneren, linken und rechten Verknüpfungsoperationen für zwei CSV-Dateien auszuführen. Welche Spalte als Verknüpfungsschlüssel in jeder der Dateien verwendet wird, ist konfigurierbar.
Bitte zitieren Sie die wesentlichen Teile der Antwort aus dem / den Verweis (en), da die Antwort ungültig werden kann, wenn sich die verlinkte (n) Seite (n) ändern.
Antworten:
Revision3 :
Sie müssen beide Listen in E-Mails alphabetisch sortieren und dann beitreten. Vorausgesetzt, dass das E-Mail-Feld das 2. Feld von Datei1 und das 1. Feld von Datei2 ist:
Parameter Bedeutung
produziert
alphabetisch nach E-Mail sortiert.
Beachten Sie, dass E-Mails, die in einer der beiden Dateien fehlen, nicht in den Ergebnissen enthalten sind.
quelle
Verwenden Sie csvkit :
oder
quelle
Vielleicht ist es übertrieben, aber Sie können zwei Arten von Tabellen in eine Datenbank (z. B. OpenOffice Base) importieren und einen Bericht definieren, der die gewünschte Ausgabe darstellt.
Wenn der CSV-Import ein Problem darstellt, kann ein Tabellenkalkulationsprogramm (z. B. OpenOffice Calc) den Import durchführen. Das Ergebnis kann dann einfach in die Datenbank übertragen werden.
quelle
Als zukünftige Referenz möchten Sie vielleicht mit AWK herumspielen . Es ist eine sehr einfache kleine Skriptsprache, die in irgendeiner Form auf jedem * nix-System vorhanden ist. Ihre einzige Mission ist, dass das Leben aus der Manipulation von Standard-Textdatenbanken mit Trennzeichen besteht. Mit ein paar Zeilen Wegwerf-Skript können Sie einige sehr nützliche Dinge tun. Die Sprache ist klein und elegant und hat ein besseres Nutzen / Komplexitäts-Verhältnis als alles andere, was mir bekannt ist.
quelle
Verwenden Sie Go: https://github.com/chrislusf/gleam
quelle
Probieren Sie CSV Cruncher .
Es nimmt CSV-Dateien als SQL-Tabellen und lässt dann SQL-Abfragen zu, was zu einer anderen CSV- oder JSON-Datei führt.
Für Ihren Fall rufen Sie einfach an:
Das Tool benötigt Java 8 oder höher.
Einige der Vorteile:
join
Lösungen auf der Basis von.Haftungsausschluss: Ich habe dieses Tool geschrieben. Früher war es nach dem Schließen von Google Code nicht mehr in Ordnung, aber ich habe es wiederbelebt und neue Funktionen hinzugefügt, während ich es verwende.
quelle
Sie können die CSV-Datei mit einem Tabellenkalkulationsprogramm wie LibreOffice lesen und mithilfe eines
VLOOKUP()
Makros nach dem Namen in der zweiten Datei suchen.quelle
Sie können auch ein Tool verwenden, das speziell für das Verknüpfen von CSV-Dateien entwickelt wurde, z. B. das Tool unter https://filerefinery.com
quelle