Количество столбцов в bash

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

Вы можете использовать bash. Обратите внимание, что для очень больших файлов с точки зрения GB используйте awk/wc. Однако он все равно должен быть управляемым по производительности для файлов с несколькими мегабайтами.

declare -i count=0
while read
do
    ((count++))
done < file    
echo "line count: $count"

Ответ 5

Маленький поворот в ответ на 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

Ответ 6

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

Ответ 7

head -1 file.tsv |head -1 train.tsv |tr '\t' '\n' |wc -l

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

Ответ 8

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

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

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

Ответ 9

Решение Perl:

perl -ane '$maxc = $#F if $#F > $maxc; END{$maxc++; print "max columns: $maxc\nrows: $.\n"}' file

Если ваш входной файл разделен запятой:

perl -F, -ane '$maxc = $#F if $#F > $maxc; END{$maxc++; print "max columns: $maxc\nrows: $.\n"}' file

выход:

max columns: 5
rows: 2

-a автоматически вводит строку ввода в массив @F
$#F - количество столбцов -1 -F, разделитель полей вместо пробелов
$. - номер строки (количество строк)

Ответ 10

Очень простой способ подсчета столбцов первой строки в чистом bash (без awk, perl или других языков):

read -r line < $input_file
ncols=`echo $line | wc -w`

Это будет работать, если ваши данные будут отформатированы соответствующим образом.

Ответ 11

Следующий код выполнит задание и позволит вам указать полевой разделитель. Это особенно полезно для файлов, содержащих более 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

Ответ 12

awk 'BEGIN{FS=","}END{print "COLUMN NO: "NF " ROWS NO: "NR}' file

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