고유번호로 이 작업을 수행할 수 있나요?

고유번호로 이 작업을 수행할 수 있나요?
read W

gawk '$9=="404" || $9=="403"' log.txt | gawk '{print $7}' |  sort -k7 | uniq -c | sort -nr | awk '{ $(NF+1) = "-"; $(NF+1) = $1; $1 = NR "."; $(NF+1) = "-"; print}' | head -"$W"

나는 입력 w를 취하고 w 줄 수를 인쇄하는 이 스크립트를 가지고 있습니다.

산출:

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 -

어떻게든 uniq에서 값을 가져와서 이를 사용하여 총 오류 수의 백분율을 찾을 수 있습니까? (uniq 수 * 100 / 총 오류 수) (총 87)

아니면 디파이 직후에 분할이 이루어질 수 있나요?

1. /example/.comments - 28 - 32.2%
2. /example/example.atom.xml - 9 - 10.3%
3. /example/When/200x/2003/04/10/-big/Concorde.jpg - 8 - 9.2%
4. /example/When/200x/2006/03/30/-big/IMG_4613.jpg - 7 - 8.0%
5. /example/When/200x/2003/07/25/-big/guild-2.jpg - 6 - 6.9%

답변1

awk 방법은 다음과 같습니다. 파일을 두 번 읽기. 첫 번째 단계에서는 t두 번째 필드의 합계가 계산됩니다 $(NF-1). 두 번째 패스에서는 백분율이 계산되어 행에 추가됩니다.

awk 'NR==FNR{t+=$(NF-1); next}{printf "%s %.1f%\n", $0, 100*$(NF-1)/t}' file file

관련 정보