Saya bekerja dengan file CSV dan kadang-kadang perlu memeriksa isi baris atau kolom dari baris perintah dengan cepat. Dalam banyak kasus cut
, head
, tail
, dan teman-teman akan melakukan pekerjaan; namun, pemotongan tidak dapat dengan mudah menangani situasi seperti
"this, is the first entry", this is the second, 34.5
Di sini, koma pertama adalah bagian dari bidang pertama, tetapi cut -d, -f1
tidak setuju. Sebelum saya menulis solusi sendiri, saya bertanya-tanya apakah ada yang tahu alat bagus yang sudah ada untuk pekerjaan ini. Paling tidak, harus mampu menangani contoh di atas dan mengembalikan kolom dari file berformat CSV. Fitur lain yang diinginkan termasuk kemampuan untuk memilih kolom berdasarkan nama kolom yang diberikan di baris pertama, dukungan untuk gaya kutipan lainnya dan dukungan untuk file yang dipisahkan oleh tab.
Jika Anda tidak tahu alat seperti itu tetapi memiliki saran mengenai penerapan program seperti itu di Bash, Perl, atau Python, atau bahasa scripting umum lainnya, saya tidak akan keberatan dengan saran semacam itu.
sumber
Saya mungkin sedikit terlambat, tetapi ada alat lain yang layak disebut: csvkit
http://csvkit.readthedocs.org/
Ini memiliki banyak alat baris perintah yang dapat:
cut
,grep
,sort
dan lain-lain, tapi CSV-sadar,sumber
Kedengarannya seperti pekerjaan untuk Perl
Text::CSV
.Lihat dokumentasi untuk cara menangani nama kolom. Gaya pemisah dan kutipan dapat disesuaikan dengan parameter ke
new
. Lihat jugaText::CSV::Separator
untuk menebak separator.sumber
(t)csh
perintah itu akan berfungsi dengan baik pada prompt shell Anda. Anda selalu dapat menggabungkan baris-baris itu bersama jika Anda menginginkannya dalam satu baris. newline umumnya seperti ruang dalam sintaks perl seperti di C.-e
menciptakan loop implisit).Saya telah menemukan csvfix, alat baris perintah melakukan pekerjaan dengan baik. Anda harus membuatnya sendiri:
http://neilb.bitbucket.org/csvfix
Itu melakukan semua hal yang Anda harapkan, memesan / memilih kolom, membagi / menggabungkan dan banyak Anda tidak ingin menghasilkan sisipan SQL dari data CSV dan data CSV yang berbeda.
sumber
Jika Anda ingin menggunakan baris perintah (dan tidak membuat seluruh program untuk melakukan pekerjaan itu), Anda ingin menggunakan baris , proyek yang sedang saya kerjakan: ini adalah antarmuka baris perintah untuk data tabular tetapi juga perpustakaan Python untuk digunakan dalam program Anda. Dengan antarmuka baris perintah, Anda dapat dengan cukup-mencetak data apa pun dalam CSV, XLS, XLSX, HTML atau format tabel lainnya yang didukung oleh perpustakaan dengan perintah sederhana:
Jika
myfile.csv
seperti ini:Maka baris akan mencetak isinya dengan cara yang indah, seperti ini:
Menginstal
Jika Anda adalah pengembang Python dan sudah
pip
menginstal pada mesin Anda, jalankan saja di dalam virtualenv atau dengansudo
:Jika Anda menggunakan Debian:
Fitur Keren Lainnya
Mengkonversi Format
Anda dapat mengkonversi antara format apa pun yang didukung:
Menanyakan
Ya, Anda bisa menggunakan SQL ke file CSV:
Mengonversi output permintaan ke file alih-alih stdout juga dimungkinkan menggunakan
--output
parameter.Sebagai Perpustakaan Python
Anda juga dapat menggunakan program Python:
Berharap kamu menikmatinya!
sumber
R bukan bahasa pemrograman favorit saya, tetapi baik untuk hal-hal seperti ini. Jika file csv Anda adalah
Di dalam jenis penerjemah R
Sehubungan dengan permintaan Anda yang lain, untuk "kemampuan untuk memilih kolom berdasarkan nama kolom yang diberikan di baris pertama" lihat
Untuk "dukungan untuk gaya kutipan lainnya" lihat
quote
argumen untuk read.csv (dan fungsi terkait). Untuk "dukungan untuk file-file yang dipisahkan-tab" lihatsep
argumen untuk read.csv (setsep
ke '\ t').Untuk informasi lebih lanjut, lihat bantuan online.
sumber
Rscript
(bagian dari distribusi R dasar) atau paket addonlittler
. Anda bisa melakukan#!/usr/bin/env Rscript
atau serupa.Saya menggunakan csvtool sekali dan itu menghemat banyak waktu dan masalah. Dipanggil dari shell.
http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=447
sumber
Miller adalah alat bagus lain untuk memanipulasi data berbasis nama, termasuk CSV (dengan header). Untuk mengekstrak kolom pertama file CSV, tanpa peduli namanya, Anda akan melakukan sesuatu seperti
sumber
awk
, tetapi sangat sadar DSV.Atau, Anda bisa mencoba beberapa sihir awk . Namun, saya bukan pengguna awk yang baik dan tidak dapat mengkonfirmasi ini akan berfungsi dengan baik, dan bagaimana melakukannya.
sumber
Lihat juga GNU Recutils dan crush-tools .
(via http://www.reddit.com/r/commandline/comments/mfcu9/anyone_using_gnu_recutils_is_it_outdatedsuperceded/ )
sumber
Untuk menggunakan python dari baris perintah, Anda dapat memeriksa pythonpy ( https://github.com/Russell91/pythonpy ):
sumber
coba "csvtool" paket ini adalah alat baris perintah yang berguna untuk menangani file CSV
sumber
cissy juga akan melakukan pemrosesan csv command-line. Ini ditulis dalam C (kecil / ringan) dengan paket rpm dan deb tersedia untuk sebagian besar distro.
Menggunakan contoh:
atau
atau
sumber
Ada juga perpustakaan Curry untuk membaca / menulis file dalam format CSV : CSV .
sumber
Structured Text Tools dari github repo memiliki daftar alat baris perintah linux yang berguna. Secara khusus, bagian Pemisah Nilai Daftar daftar beberapa alat yang mampu CSV yang secara langsung mendukung operasi yang diminta.
sumber
Saya akan merekomendasikan xsv - Toolkit baris perintah CSV cepat yang ditulis dalam Rust ( Github ).
Ditulis oleh penulis Ripgrep .
Ditampilkan di Bagaimana kami membuat pemrosesan CSV kami 142x lebih cepat ( Reddit thread ).
sumber
Salah satu alat terbaik adalah Miller ( http://johnkerl.org/miller/doc/index.html ). Itu seperti awk, sed, cut, join, dan sortir untuk data yang diindeks nama seperti CSV, TSV, dan JSON tabular.
Sebagai contoh
Memberi anda
Jika Anda menginginkan TSV
memberi Anda (mungkin untuk menghapus tajuk)
Jika Anda ingin kolom pertama dan ketiga, ubah urutannya
Memberi anda
sumber
Jika Anda menginginkan alat visual / interaktif di terminal, saya sepenuh hati merekomendasikan VisiData.
Ini memiliki tabel frekuensi (ditunjukkan di atas), pivot, melting, scatterplots, filtering / komputasi menggunakan Python, dan banyak lagi.
Anda dapat mengirimkan file csv seperti itu
vd hello.csv
Ada csv opsi khusus:
--csv-dialect
,--csv-delimiter
,--csv-quotechar
, dan--csv-skipinitialspace
untuk fine-tuned penanganan file csv.sumber
Solusi awk
sumber