подсчитать количество столбцов в bash - PullRequest
32 голосов
/ 23 апреля 2011

Скажем, у меня большой файл с множеством строк и столбцов.Я хотел бы узнать, сколько строк и столбцов я использую bash.

Ответы [ 12 ]

57 голосов
/ 23 апреля 2011

Столбцы: awk '{print NF}' file | sort -nu | tail -n 1

Используйте head -n 1 для наименьшего числа столбцов, tail -n 1 для наибольшего числа столбцов.

Строки: cat file | wc -l или wc -l < file для UUOC толпа.

6 голосов
/ 10 июля 2015

В качестве альтернативы для подсчета столбцов подсчитайте разделители между столбцами. Я считаю, что это хороший баланс краткости и легкости запоминания. Конечно, это не сработает, если ваши данные содержат разделитель столбцов.

head -n1 myfile.txt | grep -o " " | wc -l

Использует head -n1 для захвата первой строки файла. Использует grep -o для подсчета всех пробелов и вывода каждого пробела, найденного в новой строке. Использует wc -l для подсчета количества строк.

4 голосов
/ 18 августа 2014

Если ваш файл большой, но вы уверены, что количество столбцов остается неизменным для каждой строки (и у вас нет заголовка), используйте:

head -n 1 FILE | awk '{print NF}'

чтобы найти количество столбцов, где FILE - это имя вашего файла.

Чтобы узнать количество строк, wc -l FILE будет работать.

3 голосов
/ 23 апреля 2011

Вы можете использовать Bash.Обратите внимание, что для очень больших файлов в ГБ используйте awk/wc.Тем не менее, он все еще должен быть управляемым по производительности для файлов с несколькими МБ.

declare -i count=0
while read
do
    ((count++))
done < file    
echo "line count: $count"
2 голосов
/ 05 июня 2017

Небольшой поворот в ответе kirill_igum, и вы можете легко посчитать количество столбцов в любой определенной строке, которую вы хотите, и именно поэтому я пришел к этому вопросу, даже если вопрос задает весь файл. (Хотя, если ваш файл имеет одинаковые столбцы в каждой строке, это, конечно, также работает):

head -2 file |tail -1 |tr '\t' '\n' |wc -l

Дает количество столбцов строки 2. Замените 2 на 55, например, чтобы получить его для строки 55.

-bash-4.2$ cat file
1       2       3
1       2       3       4
1       2
1       2       3       4       5

-bash-4.2$ head -1 file |tail -1 |tr '\t' '\n' |wc -l
3
-bash-4.2$ head -4 file |tail -1 |tr '\t' '\n' |wc -l
5

Код выше работает, если ваш файл разделен вкладками, как мы определяем его как "tr". Если в вашем файле есть другой разделитель, скажем запятые, вы все равно можете подсчитать «столбцы», используя тот же прием, просто изменив символ разделителя «t» на «,»:

-bash-4.2$ cat csvfile
1,2,3,4
1,2
1,2,3,4,5
-bash-4.2$ head -2 csvfile |tail -1 |tr '\,' '\n' |wc -l
2
1 голос
/ 03 октября 2016

Если достаточно подсчитать количество столбцов в первом, попробуйте следующее:

awk -F'\t' '{print NF; exit}' myBigFile.tsv

, где \t - разделитель столбцов.

1 голос
/ 19 ноября 2015
head -1 file.tsv |head -1 train.tsv |tr '\t' '\n' |wc -l

взять первую строку, изменить вкладки (или вы можете использовать ',' вместо '\ t' для запятых), посчитать количество строк.

1 голос
/ 23 апреля 2011

Простой счетчик строк $(wc -l "$file"). Используйте $(wc -lL "$file"), чтобы показать количество строк и количество символов в самой длинной строке.

0 голосов
/ 14 декабря 2018
awk 'BEGIN{FS=","}END{print "COLUMN NO: "NF " ROWS NO: "NR}' file

Вы можете использовать любой разделитель в качестве разделителя полей и найти номера строк и столбцов

0 голосов
/ 06 апреля 2017

Следующий код выполнит работу и позволит вам указать разделитель полей. Это особенно полезно для файлов, содержащих более 20 тыс. Строк.

awk 'BEGIN { 
  FS="|"; 
  min=10000; 
}
{ 
  if( NF > max ) max = NF; 
  if( NF < min ) min = NF;
} 
END { 
  print "Max=" max; 
  print "Min=" min; 
} ' myPipeDelimitedFile.dat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...