1.16 awk高级应用

目录

[root@yusyang ~]# awk -F: 'NR==2{print $1}' passwd 		//取第二行的第一列
bin
[root@yusyang ~]# head -2 passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

[root@yusyang ~]# awk -F: 'NR==1{print $0}' passwd 		//取第一行的整行
root:x:0:0:root:/root:/bin/bash
[root@yusyang ~]# awk -F: 'NR==1{print $1}' passwd		 
root
[root@yusyang ~]# awk -F: 'NR==1{print $7}' passwd 
/bin/bash
[root@yusyang ~]# awk -F: 'NR==1{print $NF}' passwd 
/bin/bash
[root@yusyang ~]# awk -F: 'NR==1{print $(NF-1)}' passwd 
/root

[root@yusyang ~]# awk -F: 'NR==2' passwd 			//取第二行的整行
bin:x:1:1:bin:/bin:/sbin/nologin

[root@yusyang ~]# ip a |grep 'inet '
    inet 127.0.0.1/8 scope host lo
    inet 192.168.80.128/24 brd 192.168.80.255 scope global eth0
[root@yusyang ~]# ip a|grep 'inet '|awk -F'[ /]+' 'NR==2{print $3}'		//打印主机ip地址,取第二行
192.168.80.128

[root@yusyang ~]# cat abc 
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk 'NR==1{print $2}' abc
05/99
[root@yusyang ~]# awk '/M.Tansley/{print $2}' abc
05/99
[root@yusyang ~]# awk '/J.Lulu/{print $2}' abc
06/99

[root@yusyang ~]# awk '/J.Lulu/{print $2}' abc | tee hello.txt		//打印匹配的含有J.Lulu的行的第二列,并写入hello.txt文件
06/99
[root@yusyang ~]# cat hello.txt 
06/99

[root@yusyang ~]# awk '{print $1,$4}' abc		//逗号会增加空格
M.Tansley Green
J.Lulu green
K.King green
[root@yusyang ~]# awk '{print $1$4}' abc		//不加逗号结果会连在一起
M.TansleyGreen
J.Lulugreen
K.Kinggreen

[root@yusyang ~]# awk 'BEGIN{print "name date"}{print $1,$2}' abc	//在第一行加一行字
name date
M.Tansley 05/99
J.Lulu 06/99
K.King 07/99
[root@yusyang ~]# awk 'BEGIN{print "name date"} {print $1,$2} END{print "hehe"}' abc	//在第一行和最后一行分别加一行字
name date
M.Tansley 05/99
J.Lulu 06/99
K.King 07/99
hehe

[root@yusyang ~]# cat test.awk 		//awk脚本编写
#!/usr/bin/awk
{print $2}
[root@yusyang ~]# awk -f test.awk abc 	//脚本调用
05/99
06/99
07/99
[root@yusyang ~]# awk -F: -f test.awk passwd 
x
x
x
x

//首尾输出应用
[root@yusyang ~]# awk 'BEGIN{print "段位\t年龄"} {print $4"\t"$5}' abc	
段位	年龄
Green	8
green	9
green	10
[root@yusyang ~]# awk 'BEGIN{print "段位\t年龄"} {print $4"\t"$5} END{print "---------------------------\n6666"}' abc
段位	年龄
Green	8
green	9
green	10
---------------------------
6666

//过滤并输出倒数第二列
[root@yusyang ~]# cat abc 
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '/Green/{print $(NF-1)}' abc
40
[root@yusyang ~]# awk '/[Gg]/{print $(NF-1)}' abc
40
24
24

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '{if($5<10) print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26

[root@yusyang ~]# awk '$3 ~ /48322/{print $0}' abc
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '$3 !~ /48322/{print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '{if($5~10) print $0}' abc
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '{if($5!~10) print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '$1 ~ /^J\....u$/' abc
J.Lulu    06/99 48317 green 9 24 26

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '$4 ~ /(Green|green)/' abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56

[root@yusyang ~]# awk '/^J/' abc
J.Lulu    06/99 48317 green 9 24 26
[root@yusyang ~]# awk '/4$/' abc
M.Tansley 05/99 48311 Green 8 40 44
[root@yusyang ~]# awk '{if($1 ~ /y$/) print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44

[root@yusyang ~]# awk '{if($4 ~ /green/ && $1 ~ /J.Lulu/) print $0}' abc
J.Lulu    06/99 48317 green 9 24 26

//FNR查看一共有几行数据
[root@yusyang ~]# awk 'END{print FNR}' passwd 
29
[root@yusyang ~]# cat passwd |wc -l
29

[root@yusyang ~]# awk 'BEGIN{FS=":"}{print $1,$3}' passwd 
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5

[root@yusyang ~]# awk '{print NF}' abc
7
7
7
[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk 'END{print NR}' abc
3
[root@yusyang ~]# awk '{print NF,NR,$0}' abc
7 1 M.Tansley 05/99 48311 Green 8 40 44
7 2 J.Lulu    06/99 48317 green 9 24 26
7 3 K.King    07/99 48322 green 10 24 56

//取路径中最后一个元素
[root@yusyang ~]# cd /etc/sysconfig/network-scripts/
[root@yusyang network-scripts]# echo $PWD |awk -F/ '{print $NF}'
network-scripts
[root@yusyang network-scripts]# basename /etc/sysconfig/network-scripts/
network-scripts

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '{name=$1;belt=$4;if(belt ~ /green/) print name" is belt "belt}' abc
J.Lulu is belt green
K.King is belt green

[root@yusyang ~]# awk 'BEGIN{score="10"}{if($6 > score) print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk 'BEGIN{score="24"}{if($6 > score) print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '{if($1 ~ /J.Lulu/) $6=$6+26;print $1,$6}' abc
M.Tansley 40
J.Lulu 50
K.King 24

[root@yusyang ~]# awk '{if($1 ~ /J.Lulu/) ($1="tom");print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44
tom 06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56

[root@yusyang ~]# cat abc
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu    06/99 48317 green 9 24 26
K.King    07/99 48322 green 10 24 56
[root@yusyang ~]# awk '{if($6<$7){$8=$7-$6};print $0}' abc
M.Tansley 05/99 48311 Green 8 40 44 4
J.Lulu 06/99 48317 green 9 24 26 2
K.King 07/99 48322 green 10 24 56 32

[root@yusyang ~]# awk '{if($6<$7){$8=$7-$6};printf "%-15s %s\n",$1,$8}' abc
M.Tansley       4
J.Lulu          2
K.King          32

//数组生成
[root@yusyang ~]# awk 'BEGIN{split("123#456#789",sy,"#");print sy[1]}'
123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值