web-dev-qa-db-fra.com

Commande Unix pour obtenir le nombre de lignes dans un fichier CSV

Je dois obtenir le nombre de lignes des fichiers CSV entrants.

J'ai utilisé la commande suivante pour obtenir le compte.

wc -l filename.csv

Considérons un fichier avec 1 enregistrement, je reçois des fichiers avec un \* au début, et pour ces fichiers, si je lance la commande ci-dessus, le nombre de 0 est renvoyé.

Pourquoi \* au début du fichier ne s’inscrit pas en tant que ligne comptée et existe-t-il un moyen de contourner le problème?

20
Devoloper250

Une astuce pour vous assurer que les lignes non terminées sont également comptées peut être:

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

Cela semble compter toutes les lignes non vides, mais ignore les lignes vides.

Veuillez noter que cela est plutôt inefficace, mais ce n'est probablement pas un problème pour une utilisation occasionnelle.

Une autre possibilité, compte toutes les lignes, y compris la dernière ligne non terminée:

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

Testé sur RHEL 6.2. YMMV.

9
Trygve Flathen

wc signalera 0 pour les fichiers avec une seule ligne et sans nouvelle ligne. Peut-être que vos fichiers csv one-record sont comme ça? Vous pouvez rechercher les nouvelles lignes de fin avec hexdump, par exemple:

hexdump -C fn.csv

Recherchez le code ascii 0a à la fin.

1
Trygve Flathen