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?
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?
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:
sort -t , -k 2,2 file1.csv > sort1.csv
sort -t , -k 1,1 file2.csv > sort2.csv
join -t , -1 2 -2 1 sort1.csv sort2.csv > sort3.csv
Parameter Bedeutung
-t,: ',' ist das Feldtrennzeichen -k 2,2: Zeichensortierung im 2. Feld -k 1,1: Zeichensortierung im 1. Feld -1 2: Datei 1, 2. Feld -2 1: Datei 2, 1. Feld >: Ausgabe in eine Datei
produziert
E-Mail, ID, Name E-Mail, ID, Name ...
alphabetisch nach E-Mail sortiert.
Beachten Sie, dass E-Mails, die in einer der beiden Dateien fehlen, nicht in den Ergebnissen enthalten sind.
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.
Verwenden Sie Go: https://github.com/chrislusf/gleam
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()
}
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:
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:
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.
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.
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.