여러 파일에서 가장 긴 줄의 길이를 찾아서 인쇄하시겠습니까?

여러 파일에서 가장 긴 줄의 길이를 찾아서 인쇄하시겠습니까?

내 폴더에는 A0001-A2000이라는 라벨이 붙은 파일이 2000개 있습니다. 각 파일의 두 번째 줄에는 긴(가장 길어야 함) 줄 문자가 있습니다. 두 번째 줄의 길이와 함께 하나의 출력에 모든 파일 이름을 인쇄하고 싶습니다.

그래서 출력은 다음과 같습니다

A0001 231
A0002 123
A0003 56

도움이 된다면 파일의 가장 긴 줄을 인쇄하는 코드가 이미 있지만 더 쉬운 방법이 있다면 awk를 사용하지 않을 것입니다.

$ awk '{print length}' A0001.txt |sort -nr|head -1
231

답변1

awk 'FNR==2{print FILENAME,length; nextfile}' *

glob은 디렉토리의 모든 파일로 확장되고 Awk가 두 번째 줄에 도달하면 파일 이름과 길이를 인쇄하고 다음 파일로 이동합니다. 이는 nextfile선택 사항이며 성능만을 위한 것입니다.

디렉토리에 특이한 파일이 있을 수 있는 경우 Find를 사용하여 awk가 멈추지 않도록 하십시오.

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

-maxdepth 1find를 비재귀적으로 만듭니다(즉, 하위 디렉터리를 검색하지 않습니다). 사용할 수 없는 -prune경우 -maxdepth사용할 수 있습니다 .

답변2

최대라인인 경우아마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}
    ' *
    

답변3

일반적으로 GNU wc가 그 일을 해야 합니다.

wc -L A*
  • 파일이 명령줄을 차단하지 않는다고 가정합니다. 이 경우 for 루프나 find 명령을 사용할 수 있습니다.

관련 정보