Я ищу простой способ найти длину самой длинной строки в файле. В идеале это была бы простая команда оболочки bash вместо script.
Получить длину самой длинной строки в файле
Ответ 1
Использование wc (GNU coreutils) 7.4:
wc -L filename
дает:
101 filename
Ответ 2
awk '{print length, $0}' Input_file |sort -nr|head -1
Для справки: поиск самой длинной строки в файле
Ответ 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
Ответ 9
Вот ссылки на anwser
cat filename | awk '{print length, $0}'|sort -nr|head -1
Ответ 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
и
-
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