一意の番号でこれを行うことはできますか?

一意の番号でこれを行うことはできますか?
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回読み込む。最初のステップでは、t2番目のフィールドの合計が計算されます$(NF-1)。 2番目のパスでは、パーセンテージが計算され、行に追加されます。

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

おすすめ記事