gawk '$9=="404" || $9=="403"' log.txt | gawk '{print $7}' | sort -k7 | uniq -c | sort -nr
산출:
28 /example/.comments
9 /example/example.atom.xml
8 /example/When/200x/2003/04/10/-big/Concorde.jpg
7 /example/When/200x/2006/03/30/-big/IMG_4613.jpg
6 /example/When/200x/2003/07/25/-big/guild-2.jpg
5 /example/Patti-Smith.png
이름 URL 뒤에 고유 번호를 인쇄하는 방법은 무엇입니까? 그리고 디지털로 인쇄하세요.
1. /example/.comments - 28
2. /example/example.atom.xml - 9
3. /example/When/200x/2003/04/10/-big/Concorde.jpg - 8
4. /example/When/200x/2006/03/30/-big/IMG_4613.jpg - 7
5. /example/When/200x/2003/07/25/-big/guild-2.jpg - 6
6. /example/Patti-Smith.png - 5
7. /example/IMGP4289-2.png - 5
8. /example/IMGP4287.png - 5
9. /example/Image-Search-Mystery.png - 5
10. /example/Horses.png - 5
11. /example/When/200x/2004/02/27/-big/Unreal.png - 4
답변1
다음 awk
명령은 첫 번째 필드가 새로운 마지막 필드에 복사되고 앞에 대시가 붙도록 각 입력 줄을 수정합니다. 그러면 첫 번째 필드가 줄 번호로 바뀌고 그 뒤에 점이 표시됩니다.
awk '{ $(NF+1) = "-"; $(NF+1) = $1; $1 = NR "."; print }'
따라서 초기 파이프라인에서 awk
두 호출을 결합 sort | uniq -c
하고 끝에 표시합니다.
awk '
$9 ~ /^40[34]$/ { count[$7]++ }
END { for (a in count) print count[a], a }' log.txt |
sort -nr |
awk '{ $(NF+1) = "-"; $(NF+1) = $1; $1 = NR "."; print }'
awk
GNU (Linux 시스템 등에서 일반적) 4.0 이상이 있는 경우 sort -nr
다음을 수행할 수도 있습니다 awk
.
awk '
$9 ~ /^40[34]$/ { count[$7]++ }
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (a in count)
print ++i ".", a, "-", count[a]
}' log.txt