Linux的awk命令

简介:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

使用方法:awk  'pattern {action}'  {filenames}

pattern: 查找的内容;action 执行的命令;pattern:正则表达式,要用斜杠‘/’括起来。(pattern不是必须的,你要用的时候才写上)

awk是以文件的一行为处理单位。awk每接收文件的一行,然后执行相应的命令,来处理文本。

例1:输入last -n 5  (注:就是取出前五个登陆账户的一些信息)

PS:still logged in 是这个账户还登陆着


但是如果我只想看最近登陆的的账户,我就可以输入last -n 5| awk '{print $1}'


'|':管道,前一个命令的结果作为下一个命令的输出(啦啦啦啦啦我有时候偷懒,修改服务器时间的时候不想连续输两次就会:date -s 2016-7-19 |date -s 22:14 就像下面这样^_^)

$0表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。(注:$0就是输出全部,$1输出第一列,$2输出第二列)

如果想看到登录的账户跟对应的日期并且中间用符号“-”隔开:

PS:换了一个服务器,出现的内容跟之前有出入,所以重新截一次

输入 last -n 5| awk '{print $1"\t"$5"-"$6}'

PS:账户跟日期之间用【Tab】隔开,月份与日子之间用“-“隔开

如果想用“,“逗号隔开,并且在第一行输出"[start]HELLO WORLD"最后一行输出"[end]I am Strong "

输入 last -n 5|awk 'BEGIN{print"[start]HELLO WORLD"}{print $1","$5",‘’$6}END{print"[end]I am Strong"}'

awk工作流程:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

例2:搜索关键字  

想在日志文件里找到我刚注册的手机号00000000008的验证码,输入awk -F,  '/00000000008/' /home/test/2016_07_20_scserver.log

PS:2016_07_20_scserver.log这是一个日志文件

这样就不怕一晃神就找不到验证码啦~上图中有两条命令,第一条域分隔符写作“ -F, ”第二条写作“ -F','  ” 其实就是差了一对单引号,但是结果都一样

如果既想知道验证码又想知道时间输入awk '/00000000008/{print$1$2}  /home/test/2016_07_20_scserver.log

什么是按指定的域分隔符划分域?就是下图这样分


AWK常用内置变量:

统计一个文件的文件名,行号,列好,完整内容,输入

awk '{print"filename:"FILENAME  ",linenumber: “NR  “,columns:”NF  ",linecontent:"$0}'  /home/test/2016_07_20_scserver.log

PS:日志内容太多啦!【Ctrl】+c 停下来后就到900多行了

print还可以用printf替,这样的代码更加简洁,易读,

输入  awk '{printf("filename:%s ,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}‘    /home/test/2016_07_20_scserver.log

PS:跟上图的输出结果一致的

AWK编程:

变量和赋值,类似于C语言,awk除了内置的变量还可以自定义变量;

例3:统计2016年7月20日的日志行数,输入

awk 'BEGIN{count=0;print"[start]number is:“,count}{count=count+1;print $0}END{print"[end]number is :",count}'  /home/test/2016_07_20_scserver.log

上面的count是自定义变量,action{}里可以有多个语句,以;号隔开。

例4:统计某个文件夹下文件占用的字节数(注:这里就是root文件夹下的占用的字节数)

输入ls -l |awk 'BEGIN{size=0;print"[start]the size is:",size}{size=size+$5}END{print"the size is:",size}

PS:这里的2316667就是上图第5列数字的总和



为什么说是root文件夹的呢,因为输入pwd,服务器告诉我这些东西是root文件夹的

PS:这个pwd不是我们常用的密码的代名词,是Print Work Directory的缩写:输出工作目录,就是输出当前工作目录的意思啦~

例5:如果我们想统计某个文件夹下的文件占用的字节数,过滤1000000大小的文件(一般都是文件夹)输入

输入ls -l |awk 'BEGIN{size=0;print"[start]the size is:",size}{if($5!=1000000){size=size+$5;}}END{print"the size is:",size}

如果是想过滤比231667小的文件if条件语句就是if($5<231667)

例6:数组

awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

只学了这点皮毛~ 下次学了继续改~~~


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

推荐阅读更多精彩内容

  • awk将一行内容称为一条记录,将用指定分隔符分隔的列称为域;awk一般以空格作为域分隔符,以\n作为记录分隔符;a...
    北山学者阅读 133评论 0 1
  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,196评论 2 25
  • 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤...
    ad085d162310阅读 1,119评论 0 1
  • linux awk命令详解 来源:ggjucheng 链接:http://www.cnblogs.com/ggju...
    meng_philip123阅读 857评论 0 1
  • 一直下 一刻不停 从云端落到地面再渗入地底 到处湿漉漉的 就像我想你 可是 你 感觉到了吗 雨水 落在花草上 雨滴...
    ys枕边书阅读 105评论 0 2