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

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

2,8,42,75,101

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

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)

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

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

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

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

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

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

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

grep -o "," | wc -l

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

Другие вопросы по тегам