Получить длину самой длинной строки в файле

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

Ответ 1

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

wc -L filename

дает:

101 filename

Ответ 3

awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }'  YOURFILE 

Ответ 4

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

#!/bin/sh

MAX=0 IFS=
while read -r line; do
  if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"

Ответ 5

wc -L < filename

дает

101

Ответ 6

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

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

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

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

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

Ответ 7

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

Следующие два примера подсчитывают расширенные вкладки

  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

Ответ 8

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

$ 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

Ответ 10

В perl:

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

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

Ответ 11

Просто для удовольствия, здесь версия Powershell:

cat filename.txt | sort length | select -last 1

И чтобы просто получить длину:

(cat filename.txt | sort length | select -last 1).Length

Ответ 12

Я работаю в среде Unix и работаю с gzipped файлами размером в несколько ГБ. Я протестировал следующие команды, используя 2 ГБ gzip файл с длиной записи 2052.

  • zcat <gzipped file> | wc -L

и

  1. zcat <gzipped file> | awk '{print length}' | sort -u

Время было на avarage

  • 117 секунд

  • 109 секунд

Вот мой script после 10 запусков.

START=$(date +%s) ## time of start

zcat $1 |  wc -L

END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

START=$(date +%s) ## time of start

zcat $1 |  awk '{print length}' | sort -u

END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"

Ответ 13

Изменение темы.

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

FILE=myfile grep `tr -c "\n" "." < $FILE | sort | tail -1` $FILE

Итак myfile

x
mn
xyz
123
abc

даст

xyz
123
abc