- awk
一种语言、工具。主要用于对linux / unix 下的数据、文本的处理。
- awk [options] 'script' var=value file(s)
- awk [options] -f scriptfile var=value file(s)
常用:awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
- NF
awk的内置命令,表示字段数,在执行过程中对应于当前的字段数。print $NF
答应一行中最后一个字段。
如,testFile:
a b c
d e
f g h i
awk '{for(i=1;i<=NF;++i)} print i, $i' testFile
结果会循环3趟,每一趟循环次数为当前行里空格分隔的字符/字符串个数;
扩:NR,行数。
- sort
-n 根据字符串数值比较大小
-r 降序
-k 参照值位置
例题:
写一个 bash 脚本以统计一个文本文件 test.txt
中每个单词出现的频率,并按照频率降序排列,一行代码实现。
awk '{for(i=1;i<=NF;i++){sum[$i]++}}END{for(k in sum){print k " " sum[k]}' test.txt | sort -nr -k2
注:此处sum[]可以理解为二维数组或map,sum 和 $i是指具体的字符串,sum[$i]是指该字符串的次数;