디렉토리의 모든 텍스트 파일에서 가장 긴 줄 찾기


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에 여러 파일을 직접 전달할 수도 있습니다.

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

물론 파일이 실제로 디렉토리 인 경우 경고가있을 수 있지만 무해해야합니다. 바이너리 파일에는 line 개념이 없기 때문에 이진 파일에 더 큰 문제가있을 수 있습니다 . 보다 구체적으로 설명하면 다음과 같은 작업을 수행 할 수 있습니다.

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

.txt현재 디렉토리 의 파일 만 일치시킵니다 .

그리고 @ G-Man이 자신의 의견에서 언급했듯이 *숨겨진 파일과 일치하지 않습니다 (점으로 시작). 원하는 경우을 사용하십시오 * .*.


또는, 아마도 cat * .* | .... 또는 고양이 의 쓸모없는 사용을 제거 하고 말하십시오 awk '...' * .*.
— G-Man, 'Reinstate

@ G-Man 실제로. 나는 당신이 논평 할 때 그것에 대한 나의 대답을 편집하고있었습니다. :-) 고양이 와 파일을 연결하는 것이 처음에는 단순 해 보였기 때문에 가장 간단하게 말했습니다 .
— 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 줄을 가지므로 가장 긴 줄을 가지지 않는 최적화입니다.


텍스트 파일이므로 줄 바꿈 문자로 끝납니다 (비어 있지 않은 경우).
— Gilles 'SO- 악마 그만해'

0

또한 GNU wc (coreutils 8.4)를 사용하면 여러 파일을 처리 할 수 ​​있습니다

wc -L *.txt
  • 각 개별 파일의 길이를 나열합니다
  • 모든 파일의 가장 긴 길이를 제공 할뿐 아니라

이것은 본질적으로 다른 답변에서 언급 한 것과 wc -L같지만 솔루션은 다른 모든 파일의 최대 길이를 먼저 넘어야한다는 단점이 있습니다. 거기에 어떤 장점이 있습니까?
— Anthon 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.