знайти довжину найдовшого рядка у всіх текстових файлах у каталозі


16

Я знаю, як отримати довжину найдовшого рядка в текстовому файлі awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

але як я можу отримати довжину найдовшого рядка всіх файлів у каталозі?

Відповіді:


11

Найпростішим рішенням є об'єднання всіх файлів і передача результату на ваш сценарій:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

Ви також можете передати декілька файлів, щоб розбудити:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

Звичайно, можуть бути деякі попередження, якщо файли насправді є каталогами, але вони повинні бути нешкідливими. У вас можуть бути більші проблеми з бінарними файлами, оскільки вони не мають поняття рядка . Отже, щоб бути більш конкретним, ви можете зробити щось подібне

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

щоб відповідати лише .txtфайлам у поточному каталозі.

І, як заявив @ G-Man у своєму коментарі, *не буде відповідати прихованим файлам (починаючи з крапки). Якщо ви хочете таких, використовуйте * .*.


Або, можливо, cat * .* | .... Або усунути марне використання кота і сказати awk '...' * .*.
G-Man каже: "Відновіть Моніку"

@ G-Man Дійсно. Я редагував свою відповідь про це, коли ви коментували. :-) Я сказала найпростіше, тому що об'єднання файлів з cat - це те, що спочатку здавалося простішим.
lgeorget

4

З GNU wc:

cat *.txt|wc -L

-L друкує довжину найдовшої лінії.


4

Якщо ви хочете максимальну довжину на файл, з GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

Або одна максимальна довжина у всіх файлах:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

Це передбачає, що файли закінчуються символами нового рядка. Якщо один файл не закінчується символом нової лінії, то його останній необмежений рядок буде об'єднано з першим рядком наступного файлу і, можливо, буде недійсним ваш результат.

-size +1c - це оптимізація, оскільки текстові файли, які є порожніми або містять лише один символ, мають відповідно 0 рядка та 1 порожній рядок, тому найдовший рядок не матиме.


Вони текстові файли, тому вони закінчуються символами нового рядка (якщо вони порожні).
Жил 'SO- перестань бути злим'

0

Також з GNU wc (coreutils 8.4) він може обробляти декілька файлів

wc -L *.txt
  • перелічує довжину кожного окремого файлу
  • а також забезпечити найдовшу довжину всіх файлів

Це, по суті , що це інша відповідь Згадка wc -Lробить, але ваше рішення має той недолік , що ви повинні пробиратися через максимум довжини всіх інших файлів першим. Чи є в цьому якась перевага?
Антон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.