내 폴더에는 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 1
find를 비재귀적으로 만듭니다(즉, 하위 디렉터리를 검색하지 않습니다). 사용할 수 없는 -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 명령을 사용할 수 있습니다.