Я ищу простой способ найти длину самой длинной строки в файле. В идеале это будет простая команда оболочки bash вместо скрипта.
200
Использование wc (GNU coreutils) 7.4:
wc -L filename
дает:
101 filename
-c -l -m -w
параметры POSIX.-L
это GNUism.-L
зависит от локали. Некоторые символы (как в байтовом, так и в многобайтовом смысле) могут даже не учитываться вообще!wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
вcoreutils
формуле, которая устанавливает все coreutils GNU сg
префиксом.Для справки: поиск самой длинной строки в файле
источник
END{}
блока.источник
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
Просто для забавы и в образовательных целях - чистое решение для оболочки POSIX , без бесполезного использования cat и без разветвлений для внешних команд. Принимает имя файла в качестве первого аргумента:
источник
< "$1"
него его можно легко прочитать из стандартного ввода. С тестом на$#
это можно было бы сделать и то и другое, в зависимости от количества аргументов. В этом мире просто нет нужды в бесполезных кошках. Новичков нужно учить соответственно с самого начала.longest < /usr/share/dict/words
дает
источник
wc
вывод имени файла :)Печать длины, номера строки и содержимого самой длинной строки
Печатает отсортированный список всех строк, с номерами строк и длинами
.
является оператором конкатенации - он используется здесь после того, как length ()$.
является текущим номером строки$_
- текущая строкаисточник
wc -L
лучшее решение, которое я видел до сих пор.wc -L
заняло 3 секундыwc -L
просто посчитайте количество записей - этот Q собирался найти самую длинную строку - не совсем то же самое, так что это не точное сравнение.Важный упущенный момент в приведенных выше примерах.
Следующие 2 примера подсчитывают расширенные вкладки
Следующие 2 считают не развернутые вкладки.
так
источник
Похоже, все ответы не дают номер строки самой длинной строки. Следующая команда может дать номер строки и приблизительную длину:
источник
awk '{print length}' test.txt | sort -rn | head -1
, Если вам тоже нужен фактический контент строкиawk '{print length,$0}' test.txt | sort -k1 -rn| head -1
В perl:
это только печатает линию, а не ее длину тоже.
источник
Вот ссылки на ответ
http://wtanaka.com/node/7719
источник
Просто для удовольствия, вот версия Powershell:
И просто получить длину:
источник
sort
взять filename.txt в качестве аргумента? Тогда кошка бесполезна, потому чтоsort length filename.txt | select -last 1
избегает канала и процесса, который просто копирует данные.Я работаю в среде Unix и работаю с сжатыми файлами размером в несколько ГБ. Я протестировал следующие команды, используя сжатый файл размером 2 ГБ с длиной записи 2052.
zcat <gzipped file> | wc -L
и
zcat <gzipped file> | awk '{print length}' | sort -u
Время было в среднем
117 секунд
109 секунд
Вот мой сценарий после 10 пробежек.
источник
awk
версия выигрывает от кеширования дискового блока тойwc
версии, которая запускается первой (и заполняет кэш диска). Вам нужно было бы рандомизировать порядок вызова первыми за десять прогонов, чтобы этот аргумент оставался неизменным.Вариация на тему.
Эта строка покажет все строки, имеющие длину самой длинной строки в файле, сохраняя порядок, в котором они отображаются в источнике.
Итак, мой файл
дам
источник
Если вы используете MacOS и получаете эту ошибку:
wc: illegal option -- L
вам не нужно устанавливать GNU sipmly, сделайте это.Если все, что вы хотите сделать, это просто получить количество символов в самой длинной строке файла, и вы используете OS X, запустите:
awk '{print length}' "$file_name" | sort -rn | head -1
Что-то вроде этого;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
Выходы:
The longest line in the file my_file has 117 characters
источник