awk!

            awk 也是一个强大的编辑工具,它比 sed 的功能更加强大,可以在无交互的情况下实现
相当复杂的文本操作。

1.awk 的语法

     awk [选项] ' print $1' 文件名 

选项

    -F  指定分隔符

2、awk 的内置变量
          ·FS:指定每行文本的字段分隔符,缺省为空格或制表位
          ·NF:当前处理的行的字段个数(列数)
          ·NR:当前处理的行的序数(行数)
          ·$0:当前处理的行的整行内容
         ·$n:当前处理的第 n 个字段(第 n 列)

          print:打印
 3、awk 的使用
在使用的过程中,可以使用逻辑操作符&&,表示“与”,||表示“或”,!表示“非”;还可
以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余、乘方

4、awk会根据空格和制表符,将每一行分成若干字段,依次用$1、$2、$3代表第一个字段、第二个字段、第三个字段等等。

=======================================================================

[root@localhost ~]# cat awk.txt
abcgsg
banner
age
food
feet
more

010-123456
0791-1235677
ip 192.168.200.1
ip 192.168.200.111
ip 192.168.200.11
aBggfH
Bggsgs
gaglag1

打印全文

[root@localhost ~]# awk '{print}' awk.txt print表示打印 abcgsg banner age food feet more 010-123456 0791-1235677 ip 192.168.200.1 ip 192.168.200.111 ip 192.168.200.11 aBggfH Bggsgs gaglag1
输出1到3行的内容

[root@localhost ~]# awk '(NR>=1)&&(NR<=3){print}' awk.txt NR表示行 abcgsg banner age

输出1行和三行

 [root@localhost ~]# awk 'NR==1||NR==3{print}' awk.txt
  abcgsg
  age

 
输出所有基数行

[root@localhost ~]# awk '(NR%2)==1{print}' awk.txt %表示模 abcgsg age feet 0791-1235677 ip 192.168.200.111 aBggfH gaglag1
输出所有偶数行 [root@localhost
~]# awk '(NR%2)==0{print}' awk.txt banner food more 010-123456 ip 192.168.200.1 ip 192.168.200.11 Bggsgs
输出首字母是大写的


[root@localhost ~]# awk '/^[A-Z]/{print}' awk.txt Bggsgs
Mem:剩余多大内存

[root@localhost ~]# free total used free shared buff/cache available Mem: 995896 590816 63260 8248 341820 195436 Swap: 2097148 27648 2069500 [root@localhost ~]# free | awk '/Mem:/{print int($3/$2*100)"%"}' $3表示第三列,$2表示第二列 59%

过滤出free总容量

 [root@localhost ~]# free | grep 'Mem:' | awk '{print $2}'
 995896

过滤IP地址

[root@localhost ~]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.200.115 netmask 255.255.255.0 broadcast 192.168.200.255 inet6 fe80::656c:1296:c062:6af7 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:c3:ed:86 txqueuelen 1000 (Ethernet) RX packets 4184 bytes 1545149 (1.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2329 bytes 257278 (251.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]# ifconfig ens33 | awk -F '[ :]+' 'NR==2 {print $3}' 192.168.200.115
1、提取出/etc/passwd 文件当中,UID小于1000的用户名信息和UID信息

[root@server0 ~]# awk -F : ' $3<1000  {print $1,$3}' /etc/passwd



2、提取出/etc/passwd文件当中,shell环境为”/bin/bash”的用户信息有shell信息

[root@server0 ~]# awk -F : ' $NF== "/bin/bash"  {print $1,$NF}' /etc/passwd



3、提取出/etc/passwd文件当中,第一行到第5行的用户名相关信息

[root@server0 ~]# awk -F : ' (NR>=1&&NR<=5) {print $1}' /etc/passwd



4、打印/et/passwd奇数行

[root@server0 ~]# awk -F : '{if (NR%2!=0) print $0}' /etc/passwd



5、 打印UID不等于GID的用户名

[root@server0 ~]# awk -F : '{if ($3!=$4) print $1}' /etc/passwd


6.awk提取登录用户ip地址

[root@fengxiaoli41 ~]# who |tail -1|awk -F"[ ()]+" '{print$5}'

192.168.10.1
过滤/etc/passwd中的用户名

[root@localhost ~]# awk -F ':' '{ print $1 }' /etc/passwd

root
bin
daemon
adm
lp
sync

....

......

猜你喜欢

转载自www.cnblogs.com/cxm123123form/p/11456989.html
awk