#!/bin/bash awk ' { for(i = 1; i <= NF; i++) { arr[$i]++ } } END{ for(i in arr) { print i, arr[i] } } ' nowcoder.txt | sort -k2,2n -k1,1 # NF 当前行的字段数量,默认分隔符是空白字符(空格,制表符(Tab), 多个连续的空白字符(被视为一个分隔符)) # END语句只执行一次 # sort -k2,2n -k1,1 # -k 指定排序的关键字 # 2,2 排序的起始字段 和 结束字段; 起始第2列,结束第2列 # n 按数字进行排序 # 先按 -k2,2n 排序,再按 -k1,1 排序
自测输入
welcome nowcoder welcome to nowcoder nowcoder
文件里有3行内容,awk每次处理一行
第一次总循环
$i 为 welcome arr["welcome"] 即 arr["welcome"] = 0 arr["welcome"]++ 即 arr["welcome"] = 1 $i 为 nowcoder arr["nowcoder"] 即 arr["nowcoder"] = 0 arr["nowcoder"]++ 即 arr["nowcoder"] = 1
第二次总循环
$i 为 welcome arr["welcome"]++ 即 arr["welcome"] = 2 $i 为 to arr["to"] 即 arr["to"] = 0 arr["to"]++ 即 arr["to"] = 1 $i 为 nowcoder arr["nowcoder"]++ 即 arr["nowcoder"] = 2
第三次总循环
$i 为 nowcoder arr["nowcoder"]++ 即 arr["nowcoder"] = 3
执行END语句
welcome 2 nowcoder 3 to 1
sort排序
to 1 welcome 2 nowcoder 3
END