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


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.