三剑客之awk
1.gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
2.相关参数
-
-F 设置分隔符
-
-v 定义或者修改awk的一个内部变量
3.相关变量
-
NF 记录当前列的个数
-
NR 已读出的记录数,行号
-
$0 当前整行记录
-
$(NF-n) 倒数第n+1列
-
$n 第n列的值
4.实例
[root@gsh ~]# awk '/root/' test3.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@gsh ~]# awk '/^[^r]/' test3.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
/sbin/nologin
gsh:x:1000:1000:gsh:/home/gsh:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin
gsh1:x:1002:1003::/home/gsh1:/bin/bash
TEST1:x:1099:1004::/home/TEST1:/bin/bash
TEST2:x:1111:0::/home/TEST2:/bin/nologin
test:x:1112:1112::/home/test:/bin/bash
[root@gsh ~]# awk 'NR==1' test3.txt
root:x:0:0:root:/root:/bin/bash
[root@gsh ~]# awk 'NR==1,NR==3' test3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@gsh ~]# awk 'NR<=3 && NR>=1' test3.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@gsh ~]# awk -F ":" '{print NR $1,$3}' test3.txt
1root 0
2bin 1
3daemon 2
4adm 3
5lp 4
6sync 5
7shutdown 6
8halt 7
9mail 8
10operator 11
11games 12
[root@gsh ~]# cat test4.txt
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3dbf:a79d:a1e4:f44c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:60:21:c3 txqueuelen 1000 (Ethernet)
RX packets 1397 bytes 125546 (122.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 847 bytes 122298 (119.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@gsh ~]# awk -F "[a-z ]+" 'NR==2{print $2}' test4.txt
10.0.0.100
5.练习题
-
显示所有电话号码
-
显示 Dan 的电话号码
-
-
显示所有以 D 开头的姓
-
显示所有以一个 C 或 E 开头的名
-
显示所有只有四个字符的名
-
显示所有区号为 916 的人名
-
显示 Mike 的捐款.显示每个值时都有以$开头.如$250$100$175
-
显示姓,其后跟一个逗号和名,如 Jody,Savage
[root@gsh ~]# cat test1.txt
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
[root@gsh ~]# awk -F "[a-zA-Z :]+" '$3~"[0-9]"{print $2,$3}' test1.txt
[root@gsh ~]# awk -F "[ :]" '$1=="Dan"{print $3,$4}' test1.txt
[root@gsh ~]# awk '/Susan/' test1.txt |awk -F "[ :]" '{print $1,$3,$4}'
[root@gsh ~]# awk -F "[ :]" '$2~"^D"{print $2}' test1.txt
[root@gsh ~]# awk -F " " '$1~"^C|^E"{print $1}' test1.txt
[root@gsh ~]# awk 'length($1)=="4"{print $1}' test1.txt
[root@gsh ~]# awk -F "[ :]|[[]|[]]" '$4=="916"{print $1}' test1.txt 3
[root@gsh ~]# awk -F "[ :]" '$1=="Mike"{print $1,"$"$5,"$"$6,"$"$7}' test1.txt
[root@gsh ~]# awk -F "[ :]" '$1~"[A-Z]"{print $1","$2}' test1.txt
浙公网安备 33010602011771号