【Linux】awk指令
介绍:
awk是一种可以处理数据,产生格式化报表的语言。其工作方式是读取数据文件,将每一行数据视为一条记录,没笔记录按分隔符(默认空格)分割成若干字段,输出各字段的值。
实例:
[jboss@vm-kvm11902-app ~]$ cat test.txt eth0 Link encap:Ethernet HWaddr 00:1A:4A:68:11:23 inet addr:10.221.4.166 Bcast:10.221.4.255 Mask:255.255.255.0 inet6 addr: fe80::21a:4aff:fe68:1123/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:255862464 errors:0 dropped:0 overruns:0 frame:0 TX packets:277983408 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:66805026750 (62.2 GiB) TX bytes:37979102088 (35.3 GiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:12789957 errors:0 dropped:0 overruns:0 frame:0 TX packets:12789957 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:706680171 (673.9 MiB) TX bytes:706680171 (673.9 MiB)
用法1:
显示指定文件中包含指定字符串的数据行
awk '/inet/' test.txt #查找test.txt中包含inet的数据行
[jboss@vm-kvm11902-app ~]$ awk '/inet/' test.txt inet addr:10.221.4.166 Bcast:10.221.4.255 Mask:255.255.255.0 inet6 addr: fe80::21a:4aff:fe68:1123/64 Scope:Link inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host
用法2:
显示指定文件每行指定字段
awk '{print $1, $2}' test.txt #显示test.txt文件中每行第一、二字段
[jboss@vm-kvm11902-app ~]$ awk '{print $1, $2}' test.txt eth0 Link inet addr:10.221.4.166 inet6 addr: UP BROADCAST RX packets:255862464 TX packets:277983408 collisions:0 txqueuelen:1000 RX bytes:66805026750 lo Link inet addr:127.0.0.1 inet6 addr: UP LOOPBACK RX packets:12789957 TX packets:12789957 collisions:0 txqueuelen:0 RX bytes:706680171
用法3:
用法1+用法2
awk '/inet/{print $1, $2}' test.txt #显示test.txt文件中包含inet数据行的第一、二个字段
[jboss@vm-kvm11902-app ~]$ awk '/inet/{print $1, $2}' test.txt inet addr:10.221.4.166 inet6 addr: inet addr:127.0.0.1 inet6 addr:
用法4:
使用-F指定新的分隔符
awk -F: '/inet/{print $1, $2}' test.txt #显示test.txt文件中,包含inet的数据行,按照“:”进行分割的第一、二个字段
[jboss@vm-kvm11902-app ~]$ awk -F: '/inet/{print $1, $2}' test.txt inet addr 10.221.4.166 Bcast inet6 addr fe80 inet addr 127.0.0.1 Mask inet6 addr
用法5:
使用BEGIN{OFS="***"}重新定义分隔符
awk -F: 'BEGIN{OFS="***"}/inet/{print $1, $2}' test.txt #显示test.txt文件中,包含inet的数据行,按照“:”进行分割的第一、二个字段后按照分隔符“***”重新进行拼接的记录
[jboss@vm-kvm11902-app ~]$ awk -F: 'BEGIN{OFS="***"}/inet/{print $1, $2}' test.txt inet addr***10.221.4.166 Bcast inet6 addr*** fe80 inet addr***127.0.0.1 Mask inet6 addr***
举个栗子
[jboss@vm-kvm11902-app ~]$ ifconfig | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}' 10.221.4.166