Получить длину самой длинной строки в файле - PullRequest
179 голосов
/ 31 октября 2009

Я ищу простой способ найти длину самой длинной строки в файле. В идеале это будет простая команда оболочки bash вместо скрипта.

Ответы [ 13 ]

244 голосов
/ 07 июля 2010

Использование wc (GNU coreutils) 7.4:

wc -L filename

дает:

101 filename
94 голосов
/ 31 октября 2009
awk '{print length, $0}' Input_file |sort -nr|head -1

Для справки: Поиск самой длинной строки в файле

62 голосов
/ 31 октября 2009
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }'  YOURFILE 
22 голосов
/ 27 августа 2011

Просто для забавы и в образовательных целях, чистое POSIX-решение для оболочки , без бесполезного использования cat и без разветвления для внешних команд. Принимает имя файла в качестве первого аргумента:

#!/bin/sh

MAX=0 IFS=
while read -r line; do
  if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
13 голосов
/ 22 июля 2010
wc -L < filename

дает

101
11 голосов
/ 05 мая 2015
perl -ne 'print length()."  line $.  $_"' myfile | sort -nr | head -n 1

Печать длины, номера строки и содержимого самой длинной строки

perl -ne 'print length()."  line $.  $_"' myfile | sort -n

Печатает отсортированный список всех строк с номерами и длинами строк

. является оператором конкатенации - он используется здесь после length ()
$. - текущий номер строки
$_ текущая строка

4 голосов
/ 02 января 2015

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

$ cat -n test.txt | awk '{print "longest_line_number: " $1 " length_with_line_number: " length}' | sort -k4 -nr | head -3
longest_line_number: 3 length_with_line_number: 13
longest_line_number: 4 length_with_line_number: 12
longest_line_number: 2 length_with_line_number: 11
4 голосов
/ 01 мая 2012

Важный упущенный момент в приведенных выше примерах.

В следующих 2 примерах показано расширенное количество вкладок

  wc -L  <"${SourceFile}" 
# or
  expand --tabs=1 "${SourceFile}" | awk '{ if (length($0) > max) {max = length($0)} } END { print max }'

Следующие 2 считаются без развернутых вкладок.

  expand --tabs=1 "${SourceFile}" | wc -L 
# or
  awk '{ if (length($0) > max) {max = length($0)} } END { print max }' "${SourceFile}"

так

              Expanded    nonexpanded
$'nn\tnn'       10            5
3 голосов
/ 01 ноября 2009

В perl:

perl -ne 'print ($l = $_) if (length > length($l));' filename | tail -1

это печатает только строку, а не ее длину.

3 голосов
/ 31 октября 2009

Вот ссылки на ответ

cat filename | awk '{print length, $0}'|sort -nr|head -1

http://wtanaka.com/node/7719

...