概念说明: 模式识别和脚本编写
执行原理: 按行处理文件信息, 根据匹配条件信息, 完成相应操作动作
语法结构: awk [参数] ‘模式信息(条件) {动作}’ 文件信息
参数:
参数 | 用途 |
---|---|
-F | 指定列分隔符 |
-v | var=val 自定义变量赋值 |
-P(或–posix) | 支持{} |
-f | 指定awk脚本文件 |
字段(列)
变量名 | 含义 |
---|---|
$1 | 第一个字段 |
$2 | 第二个字段 |
$3 | 第三个字段 |
$NF | 最后一个字段 |
$0 | 整行 |
NF | 每行字段数 |
FS | 输入字段分隔符 |
OFS | 输出字段分隔符 |
记录(行)
变量名 | 含义 |
---|---|
NR | 行号,记录的数 awk当前处理着的,记录的数 |
RS | 输入记录(行)分隔符 |
ORS | 输出时候的分隔符 |
FNR | 当前文件的读入记录号 |
创建环境:
cat >> awk_test.txt << EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
显示xiaoyu的姓氏和ID号码
[root@yu zy]# awk 'NR==2{print $1,$3}' awk_test.txt
Zhang 390320151
姓氏是zhang的人,显示他的第二次捐款金额及他的名字
[root@yu zy]# awk '$1~/Zhang/' awk_test.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
显示所有ID号码最后一位数字是1或5的人的全名
[root@yu zy]# awk '$3~/1$|5$/' awk_test.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
显示所有ID号码最后一位数字不是1或5的人的全名
[root@yu zy]# awk '$3!~/[15]$/{print $1,$2,$3}' awk_test.txt
Zhang Dandan 41117397
Meng Feixue 80042789
Liu Bingbing 41117483
Zi Gege 1986787350
显示Xiaoyu的捐款,每个捐款数值都有以$开头, 如$110$220$330
[root@yu zy]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt
$155$90$201
可以实现数值运算 — 计算器
[root@yu zy]# awk 'BEGIN{print 2+3}'
5
[root@yu zy]# awk 'BEGIN{print 2-3}'
-1
[root@yu zy]# awk 'BEGIN{print 2*3}'
6
[root@yu zy]# awk 'BEGIN{print 2^3}'
8
[root@yu zy]# awk 'BEGIN{print 2/3}'
0.666667