Comando Unix para obtener el número de líneas en un archivo CSV

22

Tengo que obtener el recuento de líneas de los archivos CSV entrantes.

He usado el siguiente comando para obtener el recuento.

wc -l filename.csv

Considere un archivo que viene con 1 registro, obtengo algunos archivos con un \*al comienzo, y para esos archivos si ejecuto el comando anterior, devuelve el recuento 0.

¿Por qué \*al principio del archivo no se registra como una línea contada y hay una solución alternativa?

Devoloper250
fuente
intente "cat filename.csv | wc -l"
chaput
44
"cat filename.csv | wc -l" hace lógicamente lo mismo que "wc -l filename.csv" pero es menos eficiente y elegante
Alex
Devoloper250, ¿podría aclarar un poco más el último párrafo? Un ejemplo también podría ayudar.
Alex
por ejemplo: estoy obteniendo archivos csv con 1 registro que tienen * (asterisco) al comienzo de la línea. Cuando emito wc -l fn.csv iam obtengo el recuento como 0, pero idealmente debería ser 1. ¿Tiene * (asterisco) algo específico que hacer allí como otros comodines?
Devoloper250
¿Cuáles son los resultados cuando ejecuta "cat filename.csv"? Además, ¿qué distribución estás usando?
JNevill

Respuestas:

9

Un truco para garantizar que también se cuenten las líneas no terminadas puede ser:

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

Esto parece contar todas las líneas no vacías, pero omite las líneas vacías.

Tenga en cuenta que esto es bastante ineficaz, pero que probablemente no sea un problema para el uso profesional.

Otra posibilidad, cuenta todas las líneas, incluida la última línea no terminada:

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

Probado en RHEL 6.2. YMMV.

Trygve Flathen
fuente
el awkcomando funciona en OS X
Micah Stubbs
1

wc informará 0 para archivos con una sola línea y sin nueva línea final. ¿Quizás sus archivos csv de un registro sean así? Puede buscar nuevas líneas finales con hexdump, por ejemplo:

hexdump -C fn.csv

Busque el código ascii 0a al final.

Trygve Flathen
fuente