catfile
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
文本的关键是如何省略掉管道:
- awk '{
-
a[$1]++
- }END{
-
l=asort(a,b);
-
for(n=l;n>0;n--){
-
for(i in a){
-
if(a[i]==b[n]){
-
printi,a[i];
-
deletea[i];
-
break;
-
}
-
}
-
}
- }'
file
[解析]
首先统计字母出现的次数,最后在 END 中利用asort 对数组a的值进行排序,并把排序结果保存到数组b中。然后开始降序输出用 b[n] 的值判断是否与 a[i]的值相等,相等就打印出下标和其对应的值,然后从数组a中删除该下标,以免以后的循环再匹配到该下表的值。要是从小到大输出只须更改for循环即可。