Самая длинная строка в файле
Я ищу простой способ, чтобы найти длину самой длинной строки в файле. В идеале, это была бы простая команда оболочки 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"