unix-количество столбцов в файле
учитывая файл с такими данными (т. е. магазины.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
10 ответов:
это обходной путь (для меня: я не использую awk очень часто):
отобразите первую строку файла, содержащего данные, замените все каналы на новые строки и затем подсчитайте строки:
$ head -1 stores.dat | tr '|' '\n' | wc -l
Если вы не используете пробелы там, вы должны быть в состоянии использовать
| wc -wна первой линии.
wc- это "счетчик слов", который просто подсчитывает слова во входном файле. Если вы отправите только одну строку, она сообщит вам количество столбцов.
Если у вас установлен 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 аналогично решению awk Мата:
perl -F'\|' -lane 'print $#F+1; exit' stores.datЯ проверил это на файле с 1000000 столбцов.
Если разделитель полей является пробелом (один или несколько пробелов или табуляций) вместо трубы:
perl -lane 'print $#F+1; exit' stores.dat
выберите любую строку в файле (в приведенном ниже примере это 2-я строка) и подсчитайте количество столбцов, где разделителем является пробел:
sed -n 2p text_file.dat | tr ' ' '\n' | wc -l
Comments