Самая длинная строка в файле
Я ищу простой способ, чтобы найти длину самой длинной строки в файле. В идеале, это была бы простая команда оболочки bash вместо скрипта.
13 ответов:
cat filename|awk '{print length, }'|sort -nr|head -1
Для справки : поиск самой длинной строки в файле
просто для развлечения и образовательных целей, к чистое решение оболочки POSIX, без бесполезного использования cat и без разветвления на внешние команды. Принимает имя файла в качестве первого аргумента:
#!/bin/sh MAX=0 IFS= while read -r line; do if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi done < "" printf "$MAX\n"
perl -ne 'print length()." line $. $_"' myfile | sort -nr | head -n 1
выводит длину, номер строки и содержимое самой длинной строки
perl -ne 'print length()." line $. $_"' myfile | sort -n
печать отсортированного списка всех строк с номерами строк и длинами
.
является оператором конкатенации - он используется здесь после length ()$.
- это номер текущей строки$_
текущая строка
важный упущенный момент в приведенных выше примерах.
следующие 2 примера подсчитывают развернутые вкладки
wc -L <"${SourceFile}" # or expand --tabs=1 "${SourceFile}" | awk '{ if (length() > max) {max = length()} } END { print max }'
следующие 2 подсчета не расширенных вкладок.
expand --tabs=1 "${SourceFile}" | wc -L # or awk '{ if (length() > max) {max = length()} } END { print max }' "${SourceFile}"
так
Expanded nonexpanded $'nn\tnn' 10 5
в perl:
perl -ne 'print ($l = $_) if (length > length($l));' filename | tail -1
это только печатает линию, а не ее длину тоже.
выглядит все ответ не дают номер строки самой длинной строки. Следующая команда может дать номер строки и примерно длину:
$ cat -n test.txt | awk '{print "longest_line_number: " " 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
просто для удовольствия, вот версия Powershell:
cat filename.txt | sort length | select -last 1
и просто получить длину:
(cat filename.txt | sort length | select -last 1).Length
Я нахожусь в среде Unix и работаю с gzipped файлами размером в несколько GBs. Я протестировал следующие команды, используя 2 ГБ gzipped файл с длиной записи 2052.
zcat <gzipped file> | wc -L
и
zcat <gzipped file> | awk '{print length}' | sort -u
времена были в среднем
117 секунд
109 секунд
вот мой скрипт примерно через 10 работает.
START=$(date +%s) ## time of start zcat | wc -L END=$(date +%s) ## time of end DIFF=$(( $END - $START )) echo "It took $DIFF seconds" START=$(date +%s) ## time of start zcat | awk '{print length}' | sort -u END=$(date +%s) ## time of end DIFF=$(( $END - $START )) echo "It took $DIFF seconds"