У меня есть файл, содержащий длинный список чисел, разделенных запятыми, например:
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
На самом деле, чтобы сделать это правильно, вам нужно добавить один к результату