awk用法

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • awk 用法 awk ' pattern {action} ' 1、awk '/101/' file ...
    E狼阅读 1,547评论 3 4
  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,210评论 2 25
  • awk如何合并行 例如,把"^AAAA "开头的行,和它后面的行合并成一行,其他行正常输出。 脚本: 运行结果为:...
    CodingCode阅读 2,197评论 0 0
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,564评论 0 4