Ответ 1
Столбцы: awk '{print NF}' file | sort -nu | tail -n 1
Используйте head -n 1
для наименьшего количества столбцов, tail -n 1
для максимального количества столбцов.
Строки: cat file | wc -l
или wc -l < file
для UUOC.
Скажем, у меня большой файл со многими строками и многими столбцами. Я хотел бы узнать, сколько строк и столбцов я использую bash.
Столбцы: awk '{print NF}' file | sort -nu | tail -n 1
Используйте head -n 1
для наименьшего количества столбцов, tail -n 1
для максимального количества столбцов.
Строки: cat file | wc -l
или wc -l < file
для UUOC.
В качестве альтернативы для подсчета столбцов подсчитывайте разделители между столбцами. Я считаю, что это хороший баланс краткости и легкости запоминания. Конечно, это не сработает, если ваши данные включают разделитель столбцов.
head -n1 myfile.txt | grep -o " " | wc -l
Использует head -n1
для захвата первой строки файла.
Использует grep -o
для подсчета всех пробелов и вывода каждого пространства, найденного на новой строке. Использует wc -l
для подсчета количества строк.
Если ваш файл большой, но вы уверены, что количество столбцов остается одинаковым для каждой строки (и у вас нет заголовка):
head -n 1 FILE | awk '{print NF}'
чтобы найти количество столбцов, где FILE - ваше имя файла.
Чтобы найти количество строк 'wc -l FILE', будет работать.
Вы можете использовать bash. Обратите внимание, что для очень больших файлов с точки зрения GB используйте awk/wc
. Однако он все равно должен быть управляемым по производительности для файлов с несколькими мегабайтами.
declare -i count=0
while read
do
((count++))
done < file
echo "line count: $count"
Маленький поворот в ответ на 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
Простой подсчет строк $(wc -l "$file")
. Используйте $(wc -lL "$file")
, чтобы показать как количество строк, так и количество символов в самой длинной строке.
head -1 file.tsv |head -1 train.tsv |tr '\t' '\n' |wc -l
возьмите первую строку, измените вкладки (или вы можете использовать ',' вместо '\ t' для запятых), подсчитайте количество строк.
Если подсчет количества столбцов в первом достаточно, попробуйте выполнить следующее:
awk -F'\t' '{print NF; exit}' myBigFile.tsv
где \t
- разделитель столбцов.
Решение 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,
разделитель полей вместо пробелов $.
- номер строки (количество строк)
Очень простой способ подсчета столбцов первой строки в чистом bash (без awk, perl или других языков):
read -r line < $input_file
ncols=`echo $line | wc -w`
Это будет работать, если ваши данные будут отформатированы соответствующим образом.
Следующий код выполнит задание и позволит вам указать полевой разделитель. Это особенно полезно для файлов, содержащих более 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
awk 'BEGIN{FS=","}END{print "COLUMN NO: "NF " ROWS NO: "NR}' file
Вы можете использовать любой разделитель в качестве разделителя полей и можете найти номера строк и столбцов