Ara*_*ash 10 linux bash perl awk
我们有这个文件:
1 2
1 3
1 2
3 3
52 1
52 300
Run Code Online (Sandbox Code Playgroud)
和 1000 多个。
我想计算每个值在第一列中出现的次数。
1 3
3 1
52 2
Run Code Online (Sandbox Code Playgroud)
这意味着我们看了1三遍。
在 Perl、AWK 或 Bash 中,我该怎么做?
Tho*_*hor 12
如果输入已排序,则可以使用 uniq:
<infile cut -d' ' -f1 | uniq -c
Run Code Online (Sandbox Code Playgroud)
如果没有,请先排序:
<infile cut -d' ' -f1 | sort -n | uniq -c
Run Code Online (Sandbox Code Playgroud)
输出:
3 1
1 3
2 52
Run Code Online (Sandbox Code Playgroud)
与您的要求相比,输出被交换,您可以使用它awk '{ print $2, $1 }'来改变它。
1 3
3 1
52 2
Run Code Online (Sandbox Code Playgroud)
还有 awk 成语,它不需要排序输入:
awk '{h[$1]++}; END { for(k in h) print k, h[k] }'
Run Code Online (Sandbox Code Playgroud)
输出:
1 3
52 2
3 1
Run Code Online (Sandbox Code Playgroud)
由于此处的输出来自散列,因此不会排序,sort -n如果需要,请传递给:
awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 GNU awk,则可以在 awk 中进行排序:
awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'
Run Code Online (Sandbox Code Playgroud)
在最后两种情况下,输出为:
1 3
3 1
52 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19519 次 |
| 最近记录: |