Я знаю, как получить длину самой длинной строки в текстовом файле с awk
awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
но как я могу получить длину самой длинной строки из всех файлов в каталоге?
Самое простое решение - объединить все файлы и передать результат в ваш скрипт:
cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
Вы также можете напрямую передать несколько файлов в awk:
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
Конечно, могут быть некоторые предупреждения, если файлы на самом деле являются каталогами, но это должно быть безвредно. У вас могут быть большие проблемы с бинарными файлами, потому что они не имеют понятия строки . Итак, чтобы быть более конкретным, вы можете сделать что-то вроде
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
сопоставлять только .txt
файлы в текущем каталоге.
И, как сказал @ G-Man в своем комментарии, *
не будет совпадать со скрытыми файлами (начиная с точки). Если вы хотите, используйте * .*
.
cat * .* | ...
. Или исключить бесполезное использование кошки и сказатьawk '...' * .*
.С GNU
wc
:-L
печатает длину самой длинной строки.источник
Если вы хотите максимальную длину для файла, с GNU awk:
Или одна максимальная длина во всех файлах:
Это предполагает, что файлы заканчиваются символами новой строки. Если один файл не заканчивается символом новой строки, то его последняя не разделенная строка будет объединена с первой строкой следующего файла и, возможно, приведет к аннулированию вашего результата.
-size +1c
Это оптимизация, так как текстовые файлы, которые являются пустыми или содержат только один символ, имеют соответственно 0 строк и 1 пустую строку, поэтому не будут иметь самую длинную строку.источник
Также с GNU wc (coreutils 8.4) он может обрабатывать несколько файлов
источник
wc -L
, но у вашего решения есть недостаток, заключающийся в том, что вы сначала должны просмотреть максимальную длину всех остальных файлов. Есть ли в этом преимущество?