使用命令行工具计算排序序列中的重复项

let*_*nje 73 sorting bash command-line count duplicates

我有一个命令(cmd1),它通过一个日志文件来过滤掉一组数字.这些数字是随机顺序,因此我使用sort -gr来获得反向排序的数字列表.此排序列表中可能存在重复项.我需要找到该列表中每个唯一号码的计数.

例如,如果cmd1的输出是:

100 
100 
100 
99 
99 
26 
25 
24 
24
Run Code Online (Sandbox Code Playgroud)

我需要另一个命令,我可以管道上面的输出,所以,我得到:

100     3
99      2
26      1
25      1
24      2
Run Code Online (Sandbox Code Playgroud)

小智 87

怎么样;

$ echo "100 100 100 99 99 26 25 24 24" \
    | tr " " "\n" \
    | sort \
    | uniq -c \
    | sort -k2nr \
    | awk '{printf("%s\t%s\n",$2,$1)}END{print}'
Run Code Online (Sandbox Code Playgroud)

结果是:

100 3
99  2
26  1
25  1
24  2
Run Code Online (Sandbox Code Playgroud)

  • 以下内容在结果之间添加了一条新行,并删除了末尾的额外行:`echo"100 100 100 99 99 26 25 24 24"| tr"""\n"| 排序| uniq -c | sort -k2nr | awk'{printf("%s\t%s \n",$ 2,$ 1)} END {print}'| head -n -1`所以你得到:`100 3 99 2 26 1 25 1 24 2` (3认同)

Ibr*_*him 46

uniq -c 至少适用于GNU uniq 8.23,并且完全符合您的要求(假设已排序的输入).

  • 如果输入没有排序,那么只需添加`sort`命令:`sort file_name | uniq -c` (2认同)

gho*_*g74 10

如果订单不重要

# echo "100 100 100 99 99 26 25 24 24" | awk '{for(i=1;i<=NF;i++)a[$i]++}END{for(o in a) printf "%s %s ",o,a[o]}'
26 1 100 3 99 2 24 2 25 1
Run Code Online (Sandbox Code Playgroud)


eri*_*tin 9

用数字对数字进行反向排序,然后计算重复项,然后交换左右单词。对齐列。

printf '%d\n' 100 99 26 25 100 24 100 24 99 \
   | sort -nr | uniq -c | awk '{printf "%-8s%s\n", $2, $1}'
Run Code Online (Sandbox Code Playgroud)
printf '%d\n' 100 99 26 25 100 24 100 24 99 \
   | sort -nr | uniq -c | awk '{printf "%-8s%s\n", $2, $1}'
Run Code Online (Sandbox Code Playgroud)