awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel)。处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。
1.格式
pattern可以理解为条件,也可以理解为筛选内容(范围)。
例如:
awk结合正则查看文本的内容:
-F 指定awk按照什么标志进行文件的切割,切割成一列一列的。如果不指定 -F 参数 awk默认以空格进行文本的切割,{}中的代表输出的意思,$代表取列 ,$1就是取第一列,以此类推。($0,取文本的全部,$NF取每行的最后一列)
应用
按单词出现频率降序排序(计算文件中每个单词的重复数量)
注:(此处使用sort -rn(逆转排序)与uniq -c(删除相同的并计数)
例如
awk的模式都有几种:
- 正则表达式作为模式
- 比较表达式作为模式
- 范围模式
- 特殊模式BEGIN和END
例如
练习题1:显示姓Zhang的人的第二次捐款金额及她的名字
awk -F "[ :]+" '$1~/^Zhang/{print $1,$5}' test
练习题2:显示Xiaoyu的名字和ID号码
awk -F "[ :]+" '$2~/Xiaoyu/{print $1$2,$3}' test
练习题3:显示所有以41开头的ID号码的人的全名和ID号码
awk -F "[ :]+" '$3~/^41/{print $1$2,$3}' test
练习题4:显示所有以一个D或X开头的人名全名
awk -F "[ :]+" '$2~/^D|^X/{print $1$2}' test
练习题5:显示所有ID号码最后一位数字是1或5的人的全名
awk -F "[ :]+" '$3~/1$|5$/{print $1$2}' test
练习题6:显示Xiaoyu的捐款,每个值都有以开头。如520135
awk -F "[ ]+" '$2~/Xiaoyu/{print $4}' test | tr ":" "$"
练习题7:显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
awk -F "[ ]+" '{print $1,$2}' test | tr " " ","
变量
默认变量的初始值为0,BEGIN(可以计算,赋值)
END模式输出结果
求和(1-100,使用seq 追加100到11文件)
数组
例如
我们可以利用(动作 )进行运算,利用END模块(for循环(对重复的数据计数))输出结果