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メソッドは次のとおりです。
ファイルを2回読み込む。最初のステップでは、t
2番目のフィールドの合計が計算されます$(NF-1)
。 2番目のパスでは、パーセンテージが計算され、行に追加されます。
awk 'NR==FNR{t+=$(NF-1); next}{printf "%s %.1f%\n", $0, 100*$(NF-1)/t}' file file