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?
Trochę więcej szczegółów na złączeniu (tj. Wewnętrzny, zewnętrzny, lewy). Czy lista e-mail na 1. CSV jest identyczna z drugą listą? Czy może zawiera więcej?
hyperslug
Przydałyby się przykłady plików csv wraz z używanym systemem operacyjnym?
Troggy,
Myślę, że 1. i 2. lista są identyczne. Używam Linuksa. Proszę pomóż!!! dzięki!! :)
crst53
1
jak duże są dane?
Joshua
Odpowiedzi:
24
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:
-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.
CSV jest bardziej skomplikowany. Separator pól można na przykład uciec.
pguardiario
@yperslug czy mogę wykonać pełne łączenie zewnętrzne?
Abu Shoeb,
To nie zadziała, jeśli CSV jest mieszany w cudzysłowie / nie jest cytowany, jeśli identyfikator zawiera przecinek. Użyj tego rozwiązania tylko do jednorazowego przetwarzania, w którym sprawdzasz wynik. Ale zalecam nie używać go do skryptu na poziomie produkcyjnym.
niesamowite narzędzie. Nawet uznałem, że jeden z moich plików ma separator inny niż „”.
D_K
6
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.
awk nie obsługuje cytowania i zmiany znaczenia (o ile wiem, radzenia sobie z plikiem s w oddzielnym pliku CSV). W razie potrzeby korzystanie z dedykowanej biblioteki obsługi CSV jest łatwiejsze; istnieją dla wielu języków.
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()
}
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:
Naprawdę otrzymujesz wsparcie CSV, a nie tylko „załóżmy, że dane są poprawne”.
Możesz dołączyć do wielu kluczy.
Łatwiejsze w użyciu i zrozumieniu niż joinoparte na rozwiązaniach.
Możesz łączyć więcej niż 2 pliki CSV.
Możesz dołączyć wyrażenia SQL - wartości nie muszą być takie same.
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.
Rozszerzenie pliku xlsx oznacza Microsoft Excel i myślę, że VLOOKUP również. To pytanie jest oznaczone tagiem Linux. Czy program Microsoft Excel jest dostępny dla systemu Linux?
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ć.
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:
znaczenie parametru
produkuje
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.
źródło
Użyj csvkit :
lub
źródło
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.
źródło
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.
źródło
Użyj Go: https://github.com/chrislusf/gleam
źródło
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ć:
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.
źródło
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.źródło
Możesz także użyć narzędzia zaprojektowanego specjalnie do łączenia plików csv, takiego jak to znalezione na https://filerefinery.com
źródło