2012-08-14 41 views
2

我有一個.sh文件,它需要一個日誌文件並提取數據並生成報告。我想計算總行數中有多少百分比出現錯誤彈出窗口(頂級講話者)。如何在bash腳本中使用uniq -cd並只提取計數而不是行?

到目前爲止,我有這樣的:

awk '// {print $4, substr($0, index($0,$9))}' | sort \ 
         | uniq -cd | sort -nr | head -n20 > $filename-sr1.tmp 

此輸出兩列,計數加線。

我怎樣才能把計數作出計算。例如, count/total_lines = 0.000000 ...

回答

2

首先我看着得到一些相似的輸出到您

cat text.txt | sort | uniq -cd | sort -nr | head -n20 > output.txt 

output.txt的現在看起來是這樣的:

 5 red 
     3 orange 
     3 blue 
     2 green 

希望這類似於你有輸出?

要得到的百分比,計算在原文件中的行,然後循環,雖然在輸出文件,並使用剪切每條線剪斷了每個詞/短語計數和BC做的款項:

total_lines=$(wc -l < text.txt) 
while read -r line; do 
    count=$(echo $line | cut -f1 -d " "); 
    percent=$(echo "scale=4; ($count/$total_lines)*100" | bc); 
    echo "$percent% -- $line"; 
done < output.txt; 

結果如下:

38.4600% -- 5 red 
23.0700% -- 3 orange 
23.0700% -- 3 blue 
15.3800% -- 2 green 
+0

OK的作品......第二步是移植了到蝙蝠:/基本上我創建一個Linux和Windows環境報告。你現在不能用蝙蝠版本幫助我嗎?我欺騙了一下,並在GNU的Windows機器上安裝了gawk和coreutils:p – MikeyC343 2012-08-16 19:09:48

+0

@ MikeyC343然後,您只需在windows計算機上安裝bash一步即可......然後您就可以擁有一個適用於兩者的腳本系統。然後再一次,你已經有了awk,所以你可以用awk來完成所有的工作,並刪除bash/cmd.exe需求。 – geirha 2012-08-16 19:14:32

3

這裏的只用AWK,雖然輸出順序將是任意的,所以你可能需要將其管排序-n

$ cat file 
foo 
foo 
bar 
foo 
quux 
quux 
$ awk '{a[$0]++} END{for (i in a) if (a[i]>1) printf "%5.2f%%\t%s\n", 100*a[i]/NR, i}' file 
33.3% quux 
50.0% foo 

和適應當前的AWK:

awk '{a[$4" "substr($0, index($0,$9))]++} END{for (i in a) if (a[i]>1) printf "%5.2f%%\t%s\n", 100*a[i]/NR, i}' 
# or possibly 
awk '{s=$4; for(i=9;i<=NF;++i) s=s" "$i; a[s]++} END{for (i in a) if (a[i]>1) printf "%5.2f%%\t%s\n", 100*a[i]/NR, i}' 
+0

感謝您的回覆...雖然如果您可以將您的注意力轉移到我對上述答案的回覆中,您也許可以幫助我......謝謝:) – MikeyC343 2012-08-16 19:12:03

+0

管道到'sort -nr' :) – 2013-11-27 20:30:38