Perintah Unix untuk mendapatkan jumlah baris dalam file CSV

22

Saya harus mendapatkan hitungan garis dari file CSV yang masuk.

Saya telah menggunakan perintah berikut untuk mendapatkan hitungan.

wc -l filename.csv

Pertimbangkan file yang datang dengan 1 catatan, saya mendapatkan beberapa file dengan \*di awal, dan untuk file-file itu jika saya mengeluarkan perintah di atas ia mengembalikan hitungan 0.

Mengapa \*di awal file tidak mendaftar sebagai baris yang dihitung dan apakah ada penyelesaian?

Devoloper250
sumber
coba "cat filename.csv | wc -l"
chaput
4
"cat filename.csv | wc -l" secara logis melakukan hal yang sama dengan "wc -l filename.csv" tetapi kurang efisien dan elegan
Alex
Devoloper250, bisakah Anda menjelaskan paragraf terakhir sedikit lebih? Contoh juga dapat membantu.
Alex
misalnya: Saya mendapatkan file csv dengan 1 catatan yang memiliki * (tanda bintang) di awal baris. Ketika saya mengeluarkan wc -l fn.csv saya mendapatkan hitungan sebagai 0 tetapi idealnya harus 1. Apakah * (asterisk) memiliki hal khusus untuk dilakukan di sana seperti wildcard lainnya ??
Devoloper250
Apa hasil ketika Anda menjalankan "cat filename.csv"? Juga, distribusi apa yang Anda gunakan?
JNevill

Jawaban:

9

Trik untuk memastikan bahwa saluran yang tidak dihentikan juga dihitung:

cat filename.csv | xargs -l echo | wc -l

Ini tampaknya menghitung semua garis yang tidak kosong, tetapi melompati garis kosong.

Harap dicatat bahwa ini agak tidak efektif, tetapi itu mungkin bukan masalah untuk penggunaan sesekali.

Kemungkinan lain, menghitung semua baris termasuk baris terakhir yang tidak diakhiri:

awk '{n+=1} END {print n}' filename.csv

Diuji pada RHEL 6.2. YMMV.

Cobalah Flathen
sumber
yang awkperintah bekerja pada OS X
Mikha Stubbs
1

wc akan melaporkan 0 untuk file dengan hanya satu baris dan tanpa baris baru. Mungkin file csv satu-catatan Anda seperti ini? Anda dapat mencari trailing baris baru dengan hexdump, misalnya:

hexdump -C fn.csv

Cari kode ascii 0a di akhir.

Cobalah Flathen
sumber