从文件生成直方图
给定每行包含一个单一数字的input文件,我怎么能得到一个项目在该文件中发生了多less次?
cat input.txt 1 2 1 3 1 0
所需输出(=> [1,3,1,1]):
cat output.txt 0 1 1 3 2 1 3 1
如果解决scheme也可以扩展为浮动数字,那将是非常好的。
你的意思是你想要一个项目出现在input文件中的次数? 首先对它进行sorting(如果input始终是数字,则使用-n
),然后计算唯一的结果。
sort -n input.txt | uniq -c
另外一个select:
awk '{n[$1]++} END {for (i in n) print i,n[i]}' input.txt | sort -n > output.txt
除了其他的答案之外,你可以用awk来做一个简单的图表 。 (但是,这又不是直方图。)
至less有一些可以完成
sort output.txt | uniq -c
但是订单number count
倒过来了。 这将解决这个问题。
sort test.dat | uniq -c | awk '{print $2, $1}'
使用Debian stda软件包中的maphimbu :
# use 'jot' to generate 100 random numbers between 1 and 5 # and 'maphimbu' to print sorted "histogram": jot -r 100 1 5 | maphimbu -s 1
输出:
1 20 2 21 3 20 4 21 5 18
maphimbu
也适用于浮点:
jot -r 100.0 10 15 | numprocess /%10/ | maphimbu -s 1
输出:
1 21 1.1 17 1.2 14 1.3 18 1.4 11 1.5 19
perl -lne '$h{$_}++; END{for $n (sort keys %h) {print "$n\t$h{$n}"}}' input.txt
用-n
循环每一行
每个$_
数字都会增加散列%h
一旦达到input.txt
的END
,
数字sort
哈希
打印数字$n
和频率$h{$n}
在浮点上工作的类似代码:
perl -lne '$h{int($_)}++; END{for $n (sort keys %h) {print "$n\t$h{$n}"}}' float.txt
float.txt
1.732 2.236 1.442 3.162 1.260 0.707
输出:
0 1 1 3 2 1 3 1