【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

 

posted on 2019-04-02 11:19  杂货铺已被占用  阅读(221)  评论(0编辑  收藏  举报

导航