Ответ 1
awk -F'|' '{print NF; exit}' stores.dat
Просто закройте сразу после первой строки.
Для файла с данными, подобными этому (т.е. файл store.dat)
sid|storeNo|latitude|longitude
2|1|-28.03720000|153.42921670
9|2|-33.85090000|151.03274200
Какова будет команда для вывода количества имен столбцов?
то есть. В приведенном выше примере это будет 4. (количество символов канала + 1 в первой строке)
Я думал что-то вроде:
awk '{ FS = "|" } ; { print NF}' stores.dat
но он возвращает все строки вместо первого, а для первой строки он возвращает 1 вместо 4
awk -F'|' '{print NF; exit}' stores.dat
Просто закройте сразу после первой строки.
Это обходной путь (для меня: я не использую awk очень часто):
Отобразите первую строку файла, содержащего данные, замените все каналы на новые строки и затем подсчитайте строки:
$ head -1 stores.dat | tr '|' '\n' | wc -l
Если вы не используете пробелы, вы должны использовать | wc -w
в первой строке.
wc
- это "Количество слов", которое просто подсчитывает слова во входном файле. Если вы отправляете только одну строку, она сообщит вам количество столбцов.
Вы можете попробовать
cat FILE | awk '{print NF}'
Если у вас установлен python, вы можете попробовать:
python -c 'import sys;f=open(sys.argv[1]);print len(f.readline().split("|"))' \
stores.dat
Обычно это используется для подсчета количества полей:
head -n 1 file.name | awk -F'|' '{print NF; exit}'
Решение Perl аналогично решению Mat awk:
perl -F'\|' -lane 'print $#F+1; exit' stores.dat
Я тестировал это в файле с 1000000 столбцами.
Если разделитель полей является пробелом (одним или несколькими пробелами или вкладками) вместо канала:
perl -lane 'print $#F+1; exit' stores.dat
Основываясь на ответе Cat Kerr. Эта команда работает над solaris
awk '{print NF; exit}' stores.dat
вы можете попробовать:
head -1 stores.dat | grep -o \| | wc -l
выберите любую строку в файле (в примере ниже, это вторая строка) и подсчитайте количество столбцов, где разделителем является пробел:
sed -n 2p text_file.dat | tr ' ' '\n' | wc -l