Załóżmy, że masz jeden plik CSV z 2 polami: identyfikator i adres e-mail. Masz inny plik z 2 polami: adres e-mail i nazwa. Jak możesz utworzyć plik ze wszystkimi trzema polami połączonymi w wiadomości e-mail?
Załóżmy, że masz jeden plik CSV z 2 polami: identyfikator i adres e-mail. Masz inny plik z 2 polami: adres e-mail i nazwa. Jak możesz utworzyć plik ze wszystkimi trzema polami połączonymi w wiadomości e-mail?
Odpowiedzi:
Wersja 3 :
Musisz posortować obie listy alfabetycznie, a następnie dołączyć. Biorąc pod uwagę, że pole e-mail to drugie pole pliku 1 i pierwsze pole pliku 2:
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
znaczenie parametru
-t,: „,” jest separatorem pól -k 2,2: sortowanie znaków na 2. polu -k 1,1: sortowanie znaków na 1. polu -1 2: plik 1, drugie pole -2 1: plik 2, 1. pole >: wyjście do pliku
produkuje
adres e-mail, identyfikator, imię i nazwisko adres e-mail, identyfikator, imię i nazwisko ...
posortowane alfabetycznie według wiadomości e-mail.
Pamiętaj, że jeśli w którymkolwiek pliku brakuje e-maila, zostanie on pominięty w wynikach.
Być może jest to przesada, ale możesz zaimportować do bazy danych (np. OpenOffice Base) jako dwa rodzaje tabel i zdefiniować raport, który jest pożądanym wynikiem.
Jeśli import CSV stanowi problem, program do obsługi arkuszy kalkulacyjnych (np. OpenOffice Calc) może wykonać import. Wynik można następnie łatwo przenieść do bazy danych.
W przyszłości możesz zacząć bawić się AWK . Jest to bardzo prosty, mały język skryptowy, który istnieje w jakiejś formie na każdym systemie * nix, a jego jedyną misją jest życie w manipulowaniu standardowymi bazami danych tekstowych. Za pomocą kilku wierszy skryptu możesz zrobić kilka bardzo przydatnych rzeczy. Język jest mały i elegancki i ma lepszy współczynnik użyteczności / złożoności niż wszystko inne, o czym jestem świadomy.
Użyj 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()
}
Wypróbuj CSV Cruncher .
Pobiera pliki CSV jako tabele SQL, a następnie zezwala na zapytania SQL, co powoduje powstanie innego pliku CSV lub JSON.
W twoim przypadku wystarczy zadzwonić:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
Narzędzie wymaga Java 8 lub nowszej.
Niektóre zalety:
join
oparte na rozwiązaniach.Oświadczenie: Napisałem to narzędzie. Kiedyś był nieuporządkowany po zamknięciu Google Code, ale ożywiłem go i dodałem nowe funkcje podczas jego używania.
Możesz odczytać plik CSV za pomocą programu do obsługi arkuszy kalkulacyjnych, takiego jak LibreOffice, i użyć VLOOKUP()
makra, aby wyszukać nazwę w drugim pliku.
Możesz także użyć narzędzia zaprojektowanego specjalnie do łączenia plików csv, takiego jak to znalezione na https://filerefinery.com
Operacje, które obecnie obsługujemy to: Dołączanie plików csv. Możliwe jest wykonanie SQL odpowiednika operacji łączenia zewnętrznego, wewnętrznego, lewego i prawego na dwóch plikach csv. Która kolumna zostanie użyta jako klucz łączenia w każdym z plików, można konfigurować.