01. awk命令格式与操作原理
命令格式:
sed [参数] '指令信息' 文件信息
awk [选项] '模式{动作}' [文件信息]
模式: 匹配的条件 /oldboy/
02. awk实践操作过程:
生成模拟环境
cat >> ~/reg.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
EOF
01. 显示xiaoyu的姓氏和ID号码
NR==n行数
显示第二行
awk 'NR==2' ~/reg.txt
Zhang Xiaoyu 390320151 :155:90:201
awk 'NR==2{print $0}' ~/reg.txt
Zhang Xiaoyu 390320151 :155:90:201
字符查找
~ 表示按列进行匹配
!~ 表示按列进行排除匹配
awk '$2~/Xiaoyu/' ~/reg.txt 按列匹配Xiaoyu的行
取出第二行的第一列和第三列
awk 'NR==2{print $1,$3}' ~/reg.txt
Zhang 390320151
awk 'NR==2{print $1" "$3}' ~/reg.txt
Zhang 390320151
awk '$2~/Xiaoyu/{print $1" "$3}' ~/reg.txt
Zhang 390320151
02. 姓氏是zhang的人,显示他的第二次捐款金额及他的名字
字符查找
取出第一列带有zhang的行
awk '$1~/Zhang/' reg.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
awk '/^Zhang/' reg.txt 在这是zhang开头的行
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
以张开头的行取出第二列和第四列
awk '/^Zhang/{print $2,$4}' reg.txt
Dandan :250:100:175
Xiaoyu :155:90:201
默认以空格为分割符 根据需求精准取列需指定分割符 以空格或者冒号为分隔符 取出以zhang开头行的第二列和第五列
awk -F "[ :]+" '/^Zhang/{print $2,$5}' reg.txt
Dandan 100
Xiaoyu 90
取出第二列和倒数第二行NF-1 需要括号括起来 不然是在取出的结果上减一
awk -F "[ :]+" '/^Zhang/{print $2,$(NF-1)}' reg.txt
Dandan 100
Xiaoyu 90
awk参数说明:
-F 用于指定awk切割列的条件信息
利用[]+ 可以将连续多个切割字符整合为一个整体
03. 显示所有以41开头的ID号码的人的全名和ID号码
第一历程: 根据需求找到符合条件的信息
[root@oldboy-xiaodao.com.cn ~]# awk '$3~/^41/' reg.txt
Zhang Dandan 41117397 :250:100:175
Liu Bingbing 41117483 :250:100:175
第二历程: 满足条件的信息进行处理
[root@oldboy-xiaodao.com.cn ~]# awk '$3~/^41/{print $1,$2,$3}' reg.txt
Zhang Dandan 41117397
Liu Bingbing 41117483
04. 显示所有ID号码最后一位数字是1或5的人的全名
第一历程: 根据需求找到符合条件的信息
awk '$3~/[15]$/' reg.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
awk '$3~/[15]$/{print $1,$2}' reg.txt
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai
05. 显示Xiaoyu的捐款,每个时都有以$开头, 如$110$220$330
添加信息用双引号引起来
awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' reg.txt
$155$90$201