Найти и вывести длину самой длинной строки в нескольких файлах?

Вы можете использовать подобное RewriteRuleв контексте VirtualHost:

RewriteEngine On
# if not a regular file
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
# and not a directory
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
# then rewrite to index.html
RewriteRule ^.*$ /index.html [L]

Если вы хотите, чтобы ваша конфигурация была «как можно более чистой», тогда не делайте ничего подобного и позвольте Apache вернуть HTTP 404, как и должно быть.

3
24.03.2021, 18:53
3 ответа
awk 'FNR==2{print FILENAME,length; nextfile}' *

Глоб расширяется на все файлы в каталоге, и когда Awk достигает 2-й строки, он печатает имя файла и его длину и переходит к следующему файлу. Это nextfileявляется необязательным и предназначено только для производительности.

Если в каталоге могут быть не -обычные файлы, используйте функцию «Найти», чтобы Awk не захлебнулся:

find. -type f -maxdepth 1 -exec awk 'FNR==2{print FILENAME,length; nextfile}' {} +

-maxdepth 1делает find не -рекурсивным (, т. е. не просматривает подкаталоги ). Вы также можете использовать -prune, если -maxdepthнедоступно.

4
28.04.2021, 22:57

Если максимальная строка может не быть строкой 2, вы можете сделать:

  • с GNU awk

    gawk '
        BEGINFILE {max = -1} 
        length > max {max = length} 
        ENDFILE {print FILENAME, max}
    ' *
    
  • с не -GNU awk

    awk '
        FNR == 1 {
            if (filename != "") print filename, max
            filename = FILENAME
            max = -1
        }
        length > max {max = length}
        END {print filename, max}
    ' *
    
4
28.04.2021, 22:57

Обычно эту работу должен выполнять GNU wc.

wc -L A*
  • Предполагается, что файлы не блокируют командную строку. В этом случае вы можете использовать цикл for или команду find.
0
28.04.2021, 22:57

Теги

Похожие вопросы