Считать количество элементов в 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.
Или используйте grep
grep -o "," | wc -l
На самом деле, чтобы получить это правильно, вам нужно добавить один к результату