Pracuję z plikami CSV i czasami muszę szybko sprawdzić zawartość wiersza lub kolumny z wiersza polecenia. W wielu przypadkach cut
, head
, tail
i przyjaciół zrobi pracy; Jednak cięcie nie może łatwo poradzić sobie w sytuacjach takich jak
"this, is the first entry", this is the second, 34.5
Tutaj pierwszy przecinek jest częścią pierwszego pola, ale się cut -d, -f1
nie zgadza. Zanim sam napisałem rozwiązanie, zastanawiałem się, czy ktoś wiedział o dobrym narzędziu, które już istnieje dla tej pracy. Musiałby przynajmniej móc obsłużyć powyższy przykład i zwrócić kolumnę z pliku w formacie CSV. Inne pożądane funkcje obejmują możliwość wyboru kolumn na podstawie nazw kolumn podanych w pierwszym wierszu, obsługę innych stylów cytowania i obsługę plików rozdzielanych tabulatorami.
Jeśli nie znasz takiego narzędzia, ale masz sugestie dotyczące implementacji takiego programu w Bash, Perl lub Python lub innych popularnych językach skryptowych, nie miałbym nic przeciwko takim sugestiom.
źródło
Prawdopodobnie jestem trochę za późno, ale warto wspomnieć o innym narzędziu: csvkit
http://csvkit.readthedocs.org/
Ma wiele narzędzi wiersza poleceń, które mogą:
cut
,grep
,sort
i innych, ale CSV-aware,źródło
Brzmi jak praca dla Perla
Text::CSV
.Zobacz dokumentację obsługi nazw kolumn. Styl separatora i cytowania można dostroić za pomocą parametrów do
new
. Zobacz takżeText::CSV::Separator
zgadywanie separatora.źródło
(t)csh
tą komendą, która zadziała dobrze po zachęcie powłoki. Zawsze możesz połączyć te linie razem, jeśli chcesz to w jednej linii. nowa linia jest na ogół taka sama jak spacja w składni perla, jak w C.-e
tworzy ukrytą pętlę).Znalazłem csvfix, narzędzie wiersza poleceń dobrze sobie radzi. Musisz jednak zrobić to sam:
http://neilb.bitbucket.org/csvfix
Robi wszystko, czego można się spodziewać, porządkować / wybierać kolumny, dzielić / scalać i wiele innych, których nie chciałbyś generować wstawień SQL z danych CSV i różnicowania danych CSV.
źródło
Jeśli chcesz użyć wiersza polecenia (i nie tworzysz całego programu do wykonania zadania), chcesz użyć wierszy , projektu, nad którym pracuję: jest to interfejs wiersza polecenia do danych tabelarycznych, ale także biblioteka Python do wykorzystania w twoich programach. Za pomocą interfejsu wiersza poleceń możesz ładnie wydrukować dowolne dane w CSV, XLS, XLSX, HTML lub dowolnym innym formacie tabelarycznym obsługiwanym przez bibliotekę za pomocą prostej komendy:
Jeśli
myfile.csv
tak jest:Następnie wiersze wydrukują zawartość w piękny sposób, w następujący sposób:
Instalowanie
Jeśli jesteś programistą Python i masz już
pip
zainstalowany na swoim komputerze, po prostu uruchom w virtualenv lub zsudo
:Jeśli używasz Debiana:
Inne fajne funkcje
Konwertowanie formatów
Możesz konwertować pomiędzy dowolnym obsługiwanym formatem:
Zapytanie
Tak, możesz użyć SQL w pliku CSV:
Konwersja wyniku zapytania do pliku zamiast standardowego wyjścia jest również możliwa przy użyciu
--output
parametru.Jako biblioteka Python
Możesz także w swoich programach Python:
Mam nadzieję, że ci się spodoba!
źródło
R nie jest moim ulubionym językiem programowania, ale nadaje się do takich rzeczy. Jeśli twój plik csv to
Wewnątrz typu interpretera R.
W odniesieniu do innych wniosków dotyczących „możliwości wyboru kolumn na podstawie nazw kolumn podanych w pierwszym wierszu” patrz
Aby zapoznać się z „obsługą innych stylów cytowania”, zobacz
quote
argument read.csv (i powiązane funkcje). Aby zapoznać się z „obsługą plików rozdzielanych tabulatorami”, zobaczsep
argument read.csv (ustawionysep
na „\ t”).Aby uzyskać więcej informacji, zobacz pomoc online.
źródło
Rscript
(część podstawowej dystrybucji R) lub pakiet dodatkówlittler
. Możesz zrobić#!/usr/bin/env Rscript
lub coś podobnego.Raz użyłem csvtool i zaoszczędziłem dużo czasu i kłopotów. Możliwość wywołania z powłoki.
http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=447
źródło
Miller to kolejne fajne narzędzie do manipulacji danymi opartymi na nazwach, w tym CSV (z nagłówkami). Aby wyodrębnić pierwszą kolumnę pliku CSV, nie dbając o jego nazwę, zrobiłbyś coś takiego
źródło
awk
, ale bardzo świadomy DSV.Lub możesz spróbować magii awk . Jednak nie jestem dobrym użytkownikiem awk i nie mogę potwierdzić, że to zadziała poprawnie i jak to zrobić.
źródło
Zobacz także GNU Recutils i narzędzia do kruszenia .
(przez http://www.reddit.com/r/commandline/comments/mfcu9/anyone_using_gnu_recutils_is_it_outdatedsuperceded/ )
źródło
Aby użyć Pythona z wiersza poleceń, możesz sprawdzić pythonpy ( https://github.com/Russell91/pythonpy ):
źródło
wypróbuj „csvtool” ten pakiet to przydatne narzędzie wiersza poleceń do obsługi plików CSV
źródło
cissy wykona również przetwarzanie csv z wiersza poleceń. Jest napisany w C (mały / lekki) z pakietami rpm i deb dostępnymi dla większości dystrybucji.
Korzystając z przykładu:
lub
lub
źródło
Istnieje również biblioteka Curry do odczytu / zapisu plików w formacie CSV : CSV .
źródło
Strukturalne narzędzia tekstowe github repo zawierają przydatną listę odpowiednich narzędzi wiersza poleceń systemu Linux. W szczególności sekcja Wartości oddzielane separatora zawiera listę kilku narzędzi obsługujących CSV, które bezpośrednio obsługują żądane operacje.
źródło
Polecam xsv - szybki zestaw narzędzi wiersza poleceń CSV napisany w Rust ( Github ).
Napisane przez autora Ripgrepa .
Wyróżnione w Jak przyspieszyliśmy przetwarzanie CSV 142 razy ( wątek Reddit ).
źródło
Jednym z najlepszych narzędzi jest Miller ( http://johnkerl.org/miller/doc/index.html ). To jest jak awk, sed, cut, złącz i sortuj dane indeksowane według nazw, takie jak CSV, TSV i tabelaryczny JSON.
W przykładzie
daje Ci
Jeśli chcesz TSV
daje (możliwe jest usunięcie nagłówka)
Jeśli chcesz pierwszą i trzecią kolumnę, zmieniając ich kolejność
daje Ci
źródło
Jeśli chcesz wizualnego / interaktywnego narzędzia w terminalu, z całego serca polecam VisiData.
Ma tabele częstotliwości (pokazane powyżej), wykres przestawny, topienie, wykresy rozrzutu, filtrowanie / obliczenia za pomocą Pythona i wiele innych.
Możesz przekazać takie pliki csv
vd hello.csv
Istnieje csv opcje charakterystyczne:
--csv-dialect
,--csv-delimiter
,--csv-quotechar
, i--csv-skipinitialspace
dla dostrojone obsługi plików CSV.źródło
Niesamowite rozwiązanie
źródło