Comando Unix para obter o número de linhas em um arquivo CSV

22

Preciso obter a contagem de linhas dos arquivos CSV recebidos.

Eu usei o seguinte comando para obter a contagem.

wc -l filename.csv

Considere um arquivo que vem com 1 registro, estou recebendo alguns arquivos com um \*no início e, para esses arquivos, se eu emitir o comando acima, ele retornará a contagem de 0.

Por que \*o início do arquivo não é registrado como uma linha contada e existe uma solução alternativa?

Devoloper250
fonte
tente "cat filename.csv | wc -l"
chaput
4
"filename.csv gato | wc -l" logicamente faz a mesma coisa como "wc -l filename.csv", mas é menos eficiente e elegante
Alex
Devoloper250, você poderia esclarecer um pouco mais esse último parágrafo? Um exemplo também pode ajudar.
19414 Alex
por exemplo: estou obtendo arquivos csv com 1 registro com * (asterisco) no início da linha. Quando eu emito wc -l fn.csv iam obtendo contagem como 0, mas idealmente deve ser 1. O * (asterisco) tem alguma coisa específica para fazer lá, como outros caracteres curinga?
precisa
Quais são os resultados quando você executa "cat filename.csv"? Além disso, qual distribuição você está usando?
JNevill

Respostas:

9

Um truque para garantir que também as linhas não terminadas sejam contadas pode ser:

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

Parece contar todas as linhas não vazias, mas ignora as linhas vazias.

Observe que isso é bastante ineficaz, mas isso provavelmente não é um problema para uso local.

Outra possibilidade, conta todas as linhas, incluindo a última linha não terminada:

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

Testado no RHEL 6.2. YMMV.

Trygve Flathen
fonte
o awkcomando funciona no OS X
Micah Stubbs
1

wc reportará 0 para arquivos com apenas uma linha e nenhuma nova linha à direita. Talvez seus arquivos CSV de um registro sejam assim? Você pode procurar novas linhas à direita com hexdump, por exemplo:

hexdump -C fn.csv

Procure o código ascii 0a no final.

Trygve Flathen
fonte