Unix-Befehl zum Abrufen der Zeilenanzahl in einer CSV-Datei

22

Ich muss die Anzahl der Zeilen aus eingehenden CSV-Dateien abrufen.

Ich habe den folgenden Befehl verwendet, um die Zählung zu erhalten.

wc -l filename.csv

Betrachten Sie eine Datei mit 1 Datensatz, ich erhalte einige Dateien mit einem \*am Anfang, und für diese Dateien, wenn ich den obigen Befehl absetze, gibt es count of zurück 0.

Warum wird \*am Dateianfang nicht als gezählte Zeile eingetragen und gibt es eine Abhilfe?

Devoloper250
quelle
versuchen Sie "cat
filename.csv
4
"cat filename.csv | wc -l" tut logischerweise das gleiche wie "wc -l filename.csv", ist aber weniger effizient und elegant
Alex
Devoloper250, könnten Sie diesen letzten Absatz etwas näher erläutern? Ein Beispiel könnte auch helfen.
Alex
Beispiel: Ich erhalte CSV-Dateien mit 1 Datensatz, die * (Sternchen) am Zeilenanfang haben. Wenn ich wc -l fn.csv gebe, werde ich als 0 gezählt, aber im Idealfall sollte es 1 sein. Hat * (Sternchen) eine bestimmte Sache zu tun, wie andere Wildcards?
Devoloper250
Was sind die Ergebnisse, wenn Sie "cat filename.csv" ausführen? Welche Distribution verwenden Sie?
JNevill

Antworten:

9

Ein Trick, um sicherzustellen, dass auch nicht terminierte Zeilen gezählt werden, kann sein:

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

Dies scheint alle nicht leeren Zeilen zu zählen, überspringt jedoch leere Zeilen.

Bitte beachten Sie, dass dies eher ineffektiv ist, aber für den gelegentlichen Gebrauch wahrscheinlich kein Problem darstellt.

Eine andere Möglichkeit, zählt alle Zeilen inklusive nicht abgeschlossener letzter Zeile:

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

Getestet auf RHEL 6.2. YMMV.

Trygve Flathen
quelle
Der awkBefehl funktioniert unter OS X
Micah Stubbs
1

wc meldet 0 für Dateien mit nur einer Zeile und ohne nachfolgende neue Zeile. Vielleicht sind Ihre One-Record-CSV-Dateien so? Sie können mit hexdump nach abschließenden Zeilenumbrüchen suchen, zB:

hexdump -C fn.csv

Suchen Sie am Ende nach dem ASCII-Code 0a.

Trygve Flathen
quelle