案例1:插入几个新字段
在”a b c d”的b后面插入3个字段e f g
思路:在b后面插入e f g相当于在c前面插入e f g
Note:修改字段(会反馈给$0,相当于修改了$0)或者修改$0后会重建$0(根据OFS重建$0),OFS的默认值是一个空格。
案列2:格式化空白
移除每行的前缀、后缀、空白,并将各部分左对齐
原始文档格式
直接给字段赋原值就可以格式化文本,因为更改字段会以OFS重建$0
上面的方法是以单个空格隔开每个字段,但是我们想用制表符隔开每个字段的话,因该如下操作
案列3:筛选IPv4地址
从ifconfig命令的结果中筛选出除了lo网卡外的所有IPv4地址
方法1:
#ifconfig | awk '/inet / && !($2 ~ /^127/){print $2}'
方法2:
按段落读取,默认情况下awk是以行读取,所以需要修改输入分割控制符(RS)
RS="":按段落读取
RS="\0":一次性读取所有数据,但有些特殊文件中包含了空字符\0
RS="^$":真正的一次性读取所有数据,因为非空文件不可能匹配成功
RS="\n+":按行读取,但忽略所有空行
#ifconfig | awk 'BEGIN{RS=""}{print}'
只输出第一段落
#ifconfig |awk 'BEGIN{RS=""}NR==1{print}'
取得ip地址,需要知道其在第几个字段,字段默认是以空格划分的,所以数一下ip在第几个字段,注意换行符也是空格,所以ip在地6个字段
#ifconfig |awk 'BEGIN{RS=""}NR==1{print $6}'
但是以上取法不是很好,会受到网卡的排列顺序影响,进一步改进,将lo开头的网卡排除在外即可
#ifconfig |awk 'BEGIN{RS=""}!/^lo:/{print $6}'