linux awk

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

你可能感兴趣的:(linux,awk)