awk是一门编程语言,被广泛适用于linux系统,主要用于简单脚本分析统计
今天我们就小试牛刀,实操awk
awk编程是以行为单位处理文件,语法是'pattern { action }' 即:'模式 {动作}' 记住是单引号 双引号要转义
前提:系统已经安装awk,并且存在一个demo.txt文件以便我们实践,文件内容如下:
user1 10 男
user2 20 女
user3 18 女
user4 28 男
user5 90 男
一、入门使用
输出demo文件内容:
awk '{print $0}' demo.txt
user1 10 男
user2 20 女
user3 18 女
user4 28 男
user5 90 男
1)所有的pattern action 都在单引号内
2)这里的{print $0} 为action pattern为空
3)awk会默认遍历每行内容进行匹配执行。$0为awk内置变量代表这行的所有内容。$1代码第一列 $2代表第二列依次类推
4)awk默认会以空格和制表符为分隔符来拆分每行内容。可以用参数-F执行分隔符,如-F#代表用#分割这行内容
5)也可以用linux管道方式如:cat demo.txt | awk '{print $0}'
6)awk内置很多常用变量,如NF(Number of Fileds),NR(Number of Records)等
二、pattern说明
输出男生信息
awk '/男/ {print $0}' demo.txt
user1 10 男
user4 28 男
user5 90 男
1)这里的 /男/ 就是pattern 可以使用正则匹配 //是开始结束符.
输出年龄大于20岁的信息
awk '$2>20 {print $0}' demo.txt
user4 28 男
user5 90 男
1)模式也可以用判断符号表示,如> < >= <= !=等等
输出后再首行打印表头 name age sex
awk 'BEGIN{print "name","age","sex"} {print $0}' demo.txt
name age sex
user1 10 男
user2 20 女
user3 18 女
user4 28 男
user5 90 男
1)awk默认有BEGIN和END两个模式符号,代表所有命令开始和结束执行
2)此处print逗号相当于分隔符空格
三、action说明
美化打印
1)awk支持printf格式化打印
awk '{printf("%s age is %d\n",$1,$2)}' demo.txt
user1 age is 10
user2 age is 20
user3 age is 18
user4 age is 28
user5 age is 90
支持编程语法if else while等
awk '{
if ($3 == "男") printf("%s is a boy\n", $1)
else printf("%s is a girl\n", $1)
}' demo.txt
四、 附加说明
awk是一门编程语言,支持的内容远远不及此,更多语法请下载手册参考:
https://github.com/colasjun/awk
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。