如何使用uniq的-CD在bash脚本,而只提取数量,都不行?(How to use uniq -c

2019-09-21 04:54发布

我有一个.sh文件,需要一个日志文件,并提取数据,并报告。 我想计算一下百分比总行确实错误弹出(最高用量者)。

到目前为止,我有这样的:

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

此输出两列,计数随后的行。

我怎么可以只计作计算。 例如。 count / total_lines = 0.000000 ...

Answer 1:

下面是使用只是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}'


Answer 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


文章来源: How to use uniq -cd in bash scripting and extract only the count and not the line?
标签: bash uniq