#!/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

京公网安备 11010502036488号