linux 如何在终端上显示数字计数

How to show number counts on terminal in linux

请问如何计算文件中的数字列表

awk '{for(i=1;i<=NF;i++){if($i>=0 && $i<=25){print $i}}}'

使用上面的命令,我可以在终端上显示数字的范围,但是如果有这么多,将很难统计它们。请问我怎样才能在终端上显示号码的数量,例如

1-20, 
2-22, 
3-23, 
4-24,
etc

我知道我可以使用 wc 但我不知道如何将它注入上面的命令

将输出通过管道传输到 sort -nuniq -c

awk '{for(i=1;i<=NF;i++){if($i>=0 && $i<=25){print $i}}}' filename | sort -n | uniq -c

您需要先排序,因为uniq要求所有相同的元素是连续的。

awk '
    { for(i=1;i<=NF;i++) if (0<=$i && $i<=25) cnts[$i]++ }
    END { for (n in cnts) print n, cnts[n] }
' file

虽然我个人是 awk 的粉丝,但您可能会很高兴了解 grep -o 功能。我正在使用 grep -o 来匹配文件中的所有数字,然后可以使用 awk 来选择 0 到 25(含)之间的所有数字。最后,我们可以使用sort和uniq来统计结果。

grep -o  "[0-9][0-9]*" file  |  awk '  >= 0 &&  <= 25 ' |  sort -n  | uniq -c

当然,您可以按照 Ed Morton 的建议在 awk 中使用关联数组进行计数:

egrep -o  "\d+" file |  awk '  >= 0 &&  <= 25 ' |  awk '{cnt[]++} END { for (i in cnt) printf("%s-%s\n",  i,cnt[i] ) } ' 

我修改了 Ed 的代码(通常不是一个好主意 - 我多年来一直在阅读他的代码)以展示模块化方法 - 一个用于过滤 0 和 25 范围内数字的 awk 脚本和另一个 awk 脚本用于计算(任何东西的)列表。

我还用 egrep 代替 grep 提供了与我的第一个脚本的另一个细微差别。

老实说,第二个 awk 脚本生成了一些意想不到的输出,但我想分享一个更通用方法的示例。编辑:我应用了 Ed 的建议来更正意外输出 - 现在没问题了。