Назад | Перейти на главную страницу

Подсчитываете количество элементов в однорядном CSV-файле?

У меня есть файл, содержащий длинный список чисел, разделенных запятыми, например:

2,8,42,75,101

Какая самая простая команда (из оболочки Unix) для подсчета чисел в этом файле? В приведенном выше примере это будет 5.

Проще всего, наверное, просто посчитать запятые:

sed 's/[^,]//g' yourfile.csv | wc -c

Обычно вы добавляете один, чтобы получить количество элементов, но если там есть новая строка, она тоже учитывается. Думаю, в этом случае удобно.

Также с awk:

awk -F, '{print NF}' yourfile.csv

как здесь: http://www.cyberciti.biz/faq/finding-bash-shell-array-length-elements/

это не слишком сложно

если вы можете определить свой список элементов в массиве следующим образом:

ArrayName=("element 1" "element 2" "element 3")

тогда это так просто, как:

echo ${#ArrayName[@]}

однако у вас есть CSV, так что это может быть лучше: http://www.thelinuxblog.com/working-with-csv-files-in-bash/

echo $(cat file.csv | sed ‘s/, /_ /g’ | tr ‘,’ ‘\n’ | wc -l)

Нашел это решение:

cat file.csv | sed 's/,/ /g' | wc -w

Если вы хотите использовать Python, вы можете:

str = given_csv_line_as_string
if str[-1] == ',': str = str[:-1]
print len(given_csv_line_as_string.split(','))

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

Я уверен, что в Perl есть что-то похожее и больше системного администратора, но я не использую Perl.

Или используйте grep

grep -o "," | wc -l

На самом деле, чтобы сделать это правильно, вам нужно добавить один к результату