Правильно чистый bash way
Под bash вы можете просто:
IFS=\| read -ra headline <stores.dat
echo ${#headline[@]}
4
Гораздо быстрее, как без вилок и многоразового использованиякак $headline
удерживать полную линию головы.Например, вы могли бы:
printf " - %s\n" "${headline[@]}"
- sid
- storeNo
- latitude
- longitude
Примечание Этот синтаксис будет корректно использовать пробелы и другие символы в именах столбцов.
Альтернатива: строгая двоичная проверка на максимальное количество столбцов вкаждая строка
Что если в какой-то строке есть несколько дополнительных столбцов?
Эта команда будет искать большую строку, считая разделителей :
tr -dc $'\n|' <stores.dat |wc -L
3
Максимум 3 разделителя, затем 4 поля.