plik1.csv
A,,C,D
A,,C,D
A,,C,D
A,,C,D
plik2.csv
A,B
A,B
A,B
A,B
pożądany Output.csv
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
Próbowałem użyć „dołącz” i „wklej” bezskutecznie. Czy istnieje do tego polecenie bash? Kolumna „A” jest taka sama w obu .csv
plikach.
Odpowiedzi:
Tylko z
awk
poleceniem:Pobierz wiersz z pliku 1 i zapisz go w zmiennej lokalnej
f1
, a następnie wydrukuj wiersz, który jest zapisany,f1
i na końcu wydrukuj pola trzecie ($3
) i czwarte ( )$3
z pliku 1, które są rozdzielone przecinkiem,
, i zmień OFS (separator pól wyjściowych [spacja przez default]) do przecinka (,
).Krótkie polecenie wyglądałoby tak:
wklej plik2, a następnie wytnij i wklej trzecią kolumnę do następnej (
-f3-
) z pliku1.Z
awk
ipaste
(opcja A)Poniższe polecenie kopiuje również dwie ostatnie kolumny (
C,D
) z pliku1 na końcu każdej linii w pliku2:Powyższe polecenie wklej zawartość pliku 2, następnie wydrukuj separator przecinka (
-d','
), a następnie wklej dwa ostatnie pole (NF
jest indeksem ostatniego pola i$NF
ciągiem, którego jest indeksemNF
. Podobnie$(NF-1)
jak drugie pole przed ostatnim polem) z pliku 1, gdy indeks ten redefiniuje lub dzieli za pomocą przecinka (-F','
).Z
awk
ipaste
(opcja B)To polecenie jest również takie samo jak powyżej (
$3
i$4
wskazuje na trzecie i czwarte pole każdej linii z pliku1):Lub inne rozwiązanie z
cut
poleceniem:polecenie cut w powyższym poleceniu najpierw wytnij pierwsze pole (
-f1
indeksowane przecinkiem (-d.
)) z file1 (cut -d, -f1 file1
), następnie wytnij i wklej drugie pole file2 (cut -d, -f2 file2
), a na koniec wytnij i wklej trzecią kolumnę (-f3
) do następnej (-
) z pliku1 (cut -d, -f3- file1
) ponownie.To polecenie zwraca również ten sam wynik:
wklej drugie pole z pliku1 (
awk -F',' '{print $1}' file1
), następnie wydrukuj przecinek (-d,
), następnie wklej drugą kolumnę z pliku2 (awk -F',' '{print $2}' file2
), w końcu wklej ponownie drugą i ostatnią kolumnę pliku1 (awk -F',' '{print $3","$4}' file1
).źródło
Oto piękno (tak myślę):
Podzielone na etapy:
Krok 1. Zainstaluj csvkit:
Krok 2. Użyj polecenia łączyć z przecinkiem jako separatorem
Krok 3. Podaj rzeczywiste kolumny, które chcesz. Zwróć uwagę, w jaki sposób podajesz go do pierwszej kolumny dwa razy, ponieważ jest to ta, na której faktycznie wykonywane jest łączenie (zachowanie domyślne
join
).lub w skrócie:
Możesz przekierować to standardowe wyjście do pliku (pożądanego wyjścia), jeśli chcesz.
Zalety
Ta metoda ma kilka zalet w stosunku do innych proponowanych.
Przede wszystkim: wykonuje prawdziwe połączenie. Oznacza to, że można go również wykorzystać do bardziej złożonych danych. Na przykład bardzo łatwo jest wykonać złączenie w innym polu. Nie tylko patrzy na pozycję pola, ale tak naprawdę bierze pod uwagę kolumnę. W rzeczywistości działa z formatem danych (csv) i nie traktuje tego jak tekstu.
Po drugie, wykorzystuje bardzo potężny zestaw narzędzi csv, który pozwala również na a) wyświetlanie statystyk za pomocą jednego polecenia (
csvstats)
, b) sprawdzanie, czy dane są czyste (csvclean
), ale także przekształcanie ich w json, sql, a nawet ładowanie do pyton! Ten zestaw narzędzi jest szeroko stosowany w analizie danych do przygotowywania danych.źródło
sudo apt-get install python-dev python-pip python-setuptools build-essential
- linkOto kolejny piękny. Myślę, że jak dotąd jest to najłatwiejsza ze wszystkich sugestii.
Jeśli nie instalowałeś już csvtool w przeszłości, musisz to zrobić
sudo apt-get install csvtool
.Z dokumentów:
Zwróć uwagę, jak w naszym przypadku zastępujemy drugie kolumny plików.
Przykłady
plik1.csv
plik2.csv
Łączenie dwóch plików:
Zasadniczo wklejasz drugą
file2.csv
kolumnę jako kolumnę 2 dofile1.csv
.Pamiętaj, że działa to również w tym samym dokumencie. Jeśli chcesz zamienić dwie kolumny, możesz to zrobić, używając tego samego pliku co input.csv i update.vsc.
źródło
Aby przenieść wybraną liczbę kolumn z jednego pliku do drugiego:
z dwóch plików:
plik_1
plik_2
Po ustawieniu
cols = 1
:Ale kiedy ustawisz
cols = 2
:cols = 3
:Jak używać
Skopiuj go do pustego pliku, należy ustawić ścieżkę
file1
,file2
a liczba kolumn, aby przenieść, zapisać go jakomove.py
i uruchomić go przez:W ten sposób można również dodać jedną lub więcej kolumn ze środka kolumn pliku źródłowego.
źródło
import csv
.Inna metoda w pythonie poprzez moduł csv.
script.py
Aby uruchomić powyższy skrypt,
Wynik:
źródło