linux:三剑客老大awk(简单用法)

概念说明: 模式识别和脚本编写
执行原理: 按行处理文件信息, 根据匹配条件信息, 完成相应操作动作
语法结构: 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
发布了21 篇原创文章 · 获赞 391 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Dakshesh/article/details/103017903
今日推荐