三剑客之awk

三剑客之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.练习题

  1. 显示所有电话号码

  2. 显示 Dan 的电话号码

  3. 显示 Susan 的名字和电话号码

  4. 显示所有以 D 开头的姓

  5. 显示所有以一个 C 或 E 开头的名

  6. 显示所有只有四个字符的名

  7. 显示所有区号为 916 的人名

  8. 显示 Mike 的捐款.显示每个值时都有以$开头.如$250$100$175

  9. 显示姓,其后跟一个逗号和名,如 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

 

 

posted @ 2020-09-30 20:51  Gsh-123  阅读(102)  评论(0)    收藏  举报