Команда Unix для получения количества строк в файле CSV

22

Я должен получить количество строк из входящих файлов CSV.

Я использовал следующую команду, чтобы получить счет.

wc -l filename.csv

Рассмотрим файл с 1 записью, \*в начале я получаю несколько файлов с символом a , и для этих файлов, если я выполню указанную выше команду, возвращается число 0.

Почему \*в начале файла не регистрируется счетная строка и существует ли обходной путь?

Devoloper250
источник
попробуйте "cat filename.csv | wc -l"
chaput
4
«cat filename.csv | wc -l» логически делает то же самое, что и «wc -l filename.csv», но менее эффективен и элегантен
Alex
Devoloper250, не могли бы вы уточнить, что последний абзац немного больше? Пример тоже может помочь.
Алекс
Например: я получаю CSV-файлы с 1 записью, которые имеют * (звездочку) в начале строки. Когда я запускаю wc -l fn.csv, iam получает значение 0, но в идеале это должно быть 1. Есть ли у * (звездочка) какая-то конкретная вещь, которую можно сделать там, как и другие символы подстановки?
Devoloper250
Каковы результаты при запуске "cat filename.csv"? Кроме того, какой дистрибутив вы используете?
JNevill

Ответы:

9

Уловка, чтобы гарантировать, что подсчитываются и не завершенные строки, может быть:

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

Это, кажется, считает все непустые строки, но пропускает пустые строки.

Обратите внимание, что это довольно неэффективно, но это, вероятно, не проблема для случайного использования.

Другая возможность, подсчитывает все строки, включая не завершенную последнюю строку:

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

Проверено на RHEL 6.2. YMMV.

Trygve Flathen
источник
что awkкоманда работает на OS X
Михей Стаббс
1

wc сообщит 0 для файлов только с одной строкой и без завершающей новой строки. Может быть, ваши CSV-файлы с одной записью такие? Вы можете искать завершающие символы новой строки с помощью hexdump, например:

hexdump -C fn.csv

Ищите код ASCII 0a в конце.

Trygve Flathen
источник