cat file
a
b
a
c
e
e
a
b
e
要求统计文中字母出现的次数,并按次数降序输出:
- awk '{a[$1]++}END{for(i in a)print i,a[i]}' file | sort -k2nr
-
a 3
-
e 3
-
b 2
-
c 1
文本的关键是如何省略掉管道和sort排序:
- awk '{a[++b[$1]]}END{for(i=length(a);i>0;i--)for(j in b)if(b[j]==i)print j,b[j]}' file
[解析]
首先统计字母出现的次数,最后在 END 中利用 asort 对数组a的值进行排序,并把排序结果保存到数组b中。然后开始降序输出用 b[n] 的值判断是否与 a[i] 的值相等,相等就打印出下标和其对应的值,然后从数组a中删除该下标,以免以后的循环再匹配到该下表的值。要是从小到大输出只须更改for循环即可。
阅读(4326) | 评论(2) | 转发(1) |