awk用法

作者: bug快走开 | 来源:发表于2019-02-25 18:06 被阅读0次

Level 1

以如下信息作为用例:

$ cat netstat.txt
Proto Recv-Q Send-Q Local-Address           Foreign-Address         State      
tcp        0      0 10.51.0.22:57972        tk-in-f188.1e100.n:5228 ESTABLISHED
tcp        0      0 10.51.0.22:53094        101.226.76.164:https    CLOSE_WAIT 
tcp        0      0 10.51.0.22:37514        101.227.160.102:https   CLOSE_WAIT 
tcp        0      0 10.51.0.22:37532        101.227.160.102:https   ESTABLISHED
tcp       32      0 10.51.0.22:54788        220.181.7.190:https     CLOSE_WAIT 
tcp        1      0 10.51.0.22:45064        45.55.41.223:http       CLOSE_WAIT 
tcp6       1      0 ip6-localhost:40238     ip6-localhost:ipp       CLOSE_WAIT 
udp        0      0 10.51.0.22:37833        hkg07s29-in-f3.1e:https ESTABLISHED

下面是最简单最常用的awk示例,输出第1列和第4列:

$ awk '{print $1,$4}' netstat.txt
  • 其中单引号中被大括号括着的就是awk的语句,其只能被单引号包含;
  • 其中$1,$4分别表示第一列和第四列,$0表示整个行。
    输出结果如下:
Proto Local-Address
tcp 10.51.0.22:57972
tcp 10.51.0.22:53094
tcp 10.51.0.22:37514
tcp 10.51.0.22:37532
tcp 10.51.0.22:54788
tcp 10.51.0.22:45064
tcp6 ip6-localhost:40238
udp 10.51.0.22:37833

awk的格式化输出和c语言的printf类似:

$ awk '{printf "%-8s %-8s %-8s %-18s\n",$1,$2,$3,$4}' netstat.txt
Proto    Recv-Q   Send-Q   Local-Address     
tcp      0        0        10.51.0.22:57972  
tcp      0        0        10.51.0.22:53094  
tcp      0        0        10.51.0.22:37514  
tcp      0        0        10.51.0.22:37532  
tcp      32       0        10.51.0.22:54788  
tcp      1        0        10.51.0.22:45064  
tcp6     1        0        ip6-localhost:40238
udp      0        0        10.51.0.22:37833   

Level 2

过滤记录

下面的过滤条件为: 第1列的值为tcp && 第6列的值为CLOSE_WAIT

$ awk '$1=="tcp" && $6=="CLOSE_WAIT"' netstat.txt
tcp        0      0 10.51.0.22:53094        101.226.76.164:https    CLOSE_WAIT 
tcp        0      0 10.51.0.22:37514        101.227.160.102:https   CLOSE_WAIT 
tcp       32      0 10.51.0.22:54788        220.181.7.190:https     CLOSE_WAIT 
tcp        1      0 10.51.0.22:45064        45.55.41.223:http       CLOSE_WAIT 

如果需要输出表头,可以引入内建变量NR:

$ awk '$1=="tcp" && $6=="CLOSE_WAIT" || NR==1' netstat.txt
Proto Recv-Q Send-Q Local-Address           Foreign-Address         State      
tcp        0      0 10.51.0.22:53094        101.226.76.164:https    CLOSE_WAIT 
tcp        0      0 10.51.0.22:37514        101.227.160.102:https   CLOSE_WAIT 
tcp       32      0 10.51.0.22:54788        220.181.7.190:https     CLOSE_WAIT 
tcp        1      0 10.51.0.22:45064        45.55.41.223:http       CLOSE_WAIT 

再加上格式化输出:

$ awk '$1=="tcp" && $6=="CLOSE_WAIT" || NR==1 {printf "%-8s %-20s %-20s %-20s\n",$1,$4,$5,$6}' netstat.txt
Proto    Local-Address        Foreign-Address      State               
tcp      10.51.0.22:53094     101.226.76.164:https CLOSE_WAIT          
tcp      10.51.0.22:37514     101.227.160.102:https CLOSE_WAIT          
tcp      10.51.0.22:54788     220.181.7.190:https  CLOSE_WAIT          
tcp      10.51.0.22:45064     45.55.41.223:http    CLOSE_WAIT          

内建变量

awk的一些内建变量:

内建变量 说明
$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符,默认是空格或Tab
OFS 输出字段分隔符,默认是空格或Tab
NF 当前记录中字段个数,即列数
NR 已经读出的记录数,即行号,从1开始,若有多个文件,该值不断累加
FNR 当前记录数,与NR不同的是,该值为各个文件的行号
RS 输入的记录分隔符,默认为换行符
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字

下面来看一下怎样使用这些内建变量吧!
如果要输出行号:

$ awk '$1=="tcp" && $6=="CLOSE_WAIT" || NR==1 {print NR,FNR,$1,$4,$5,$6}' netstat.txt
1 1 Proto Local-Address Foreign-Address State
3 3 tcp 10.51.0.22:53094 101.226.76.164:https CLOSE_WAIT
4 4 tcp 10.51.0.22:37514 101.227.160.102:https CLOSE_WAIT
6 6 tcp 10.51.0.22:54788 220.181.7.190:https CLOSE_WAIT
7 7 tcp 10.51.0.22:45064 45.55.41.223:http CLOSE_WAIT

相关文章

  • awk用法详解

    awk 用法 awk ' pattern {action} ' 1、awk '/101/' file ...

  • awk的使用方法

    awk 用法: 常用格式: awk [options 参数] 'commands' ...

  • 1-awk教程

    一、基本用法 awk的基本用法就是下面的形式。# 格式$ awk 脚本片段 文件名# 示例$ awk '{prin...

  • 18-文本处理三剑客之awk

    本章内容 ◆ awk介绍◆ awk基本用法◆ awk变量◆ awk格式化◆ awk操作符◆ awk条件判断◆ aw...

  • 2017 09-04 AWK

    本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...

  • awk命令使用

    用法一: awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' ...

  • shell对输出流的处理

    shell对输出流的处理awk介绍awk基本用法awk高级用法awk小技巧在日常计算机管理中,总会有很多数据输出到...

  • awk

    awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...

  • 22. 三剑客之awk

    1. AWK基础 1.1 AWK工作原理和基本用法说明 AWK:Aho, Weinberger, Kernigha...

  • awk命令的使用

    awk命令的使用 awk命令格式awk '条件1{动作1} 条件2{动作2}…' 文件名 在介绍awk命令的用法前...

网友评论

      本文标题:awk用法

      本文链接:https://www.haomeiwen.com/subject/wzwgyqtx.html