我有一个.sh
文件,需要一个日志文件,并提取数据,并报告。 我想计算一下百分比总行确实错误弹出(最高用量者)。
到目前为止,我有这样的:
awk '// {print $4, substr($0, index($0,$9))}' | sort \
| uniq -cd | sort -nr | head -n20 > $filename-sr1.tmp
此输出两列,计数随后的行。
我怎么可以只计作计算。 例如。 count / total_lines = 0.000000
...
下面是使用只是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}'
首先,我看着得到一些相似的输出到您
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
文章来源: How to use uniq -cd in bash scripting and extract only the count and not the line?