awk学习总结

简介

awk是一种编程语言,用于在linux\unix下对文本和数据的处理。
linux的三剑客:grep、sed、awk

  • grep:更适合单纯的查找或者匹配文本
  • sed:更适合编辑指定的文本
  • awk:更适合格式化文本,对文本进行复杂处理

awk基础

awk处理模式

awk逐行处理文本,按照指定的分隔符(默认空格),将行分割为多个字段,每个字段按照顺序,分别对应到awk的内置变量中。分割完后,第一个字段为$1,最后一个为$NF,$0表示当前行。

  • 注意: NF 和 $NF 不相同,NF表示当前行被分隔后,一共有多少个字段;$NF代表最后一个字段


    image.png

基础语法

  • awk [options] 'Pattern{Action}' file

awk内置变量

常用的内置变量:

  • FS:Field sperator输入分隔符
    使用举例:指定#为分隔符 awk -F# '{print $1,$2}' ; awk -v FS="#" {print $1, $2}
  • OFS: output field sperator 输出分隔符
    使用举例:指定++为输出分隔符 awk -v OFS="++" '{print $1, $2}'
  • RS:record sperator,输入行分隔符,默认是换行符
    使用举例: awk -v RS=" " {print NR, $0}
  • ORS:output record sperator,输出行分隔符,默认是换行符
    使用举例: awk -v -ORS= " " {print $1, $2}
  • NF: number of field, 当前行被分割成立几列
  • NR:number of record, 当前处理的行号(多个文件时会累加)
  • FNR: file number of record,各文件分别的行号
  • FILENAME: 当前文件名
  • ARGC: numbers of command line arguments,命令行中给定参数的个数
  • ARGV: arrays of command line arguments,一个数组,保存的是命令行中所给定的参数
    举例: awk '{print ARGV[0], ARGV[1],ARGV[2],ARGC}' test1 test2
    结果:awk test1 test2 2

awk Action之print

  • 打印整行: awk '{print}' / awk '{print $0}'
  • 打印多个内置变量或者字符: awk '{print $1, $2, 666, $3, "string"}'

awk Action 之printf 文本格式化

  • printf输出的文本不会换行,需要在对应的格式替换法中加\n
  • 指定格式和格式化的文本之间需要用,(逗号)隔开
  • 格式替换符必须与被格式化的文本一一对应
  • 使用举例:awk '{printf %5s %7.3d, $1, $2 }' : 第一个变量以字符填充,宽度5个字符,第二个变量以数字填充,7个字符宽度,精度为3位小数

awk Action之流程控制语句

  • if...else :
    cat /etc/passwd | awk -v FS=':' '{if ($3 > 500) {printf "%-15s %-15s\n", $1, "普通用户"} else {printf "%-15s %-15s\n", $1, "系统用户"}}'
  • for:awk 'BEGIN{for(i = 0; i < 6 ; i++) {print i}}'
  • while: awk 'BEGIN{i = 2; while(i < 6) {print i; i ++}}'
  • do..while: awk 'BEGIN{i = 2; do {print i; i++} while (i <6)}'
  • continue:用法跟编程语言中一样
  • break:用法跟编程语言中一样
  • exit:用法跟shell中一样,注意的是,BEGIN模式的exit执行后不会跳过END中的语句

awk之Pattern

当awk逐行处理的时候,会把Pattern作为条件,判断要处理的行是否满足条件,满足则处理。
常用的模式分为几类:

  • 空模式:没有写pattern,所有行都进行处理
  • 关系运算模式:


    image.png
  • 正则模式:把正则表达式当作模式,能匹配则算满足条件并执行响应的动作(awk使用扩展正则模式)
    awk [Options] '/正则/{Action}'
    举例: awk '/^[0-9]{2,6}/{print $0}'
  • 行范围模式:在指定的行范围内执行动作,可通过两种方式指定行范围:
    正则: awk '/正则1/, /正则2/{Action}' 从匹配到正则1开始,到匹配到正则2结束;
    关系运算模式:awk 'NR>=3 && NR <=6 {Action}'
  • 特殊pattern:
    BEGIN: 指定了处理文本之前所需要的操作
    END: 指定了处理文本之后所需要的操作
    举例:awk 'BEGIN{print "name","age"} {print $1, $2} END{print "name","age"}'

awk内置函数

  • 随机数: rand()和srand()配合使用,例如:生成(0,100)的随机数 awk 'BEGIN{srand(); print int(100*rand())}'
  • 文本替换:sub()\gsub() 将所有小写的l替换成大写L awk '{gsub("l","L",$0); print $0}' ,只将第一个匹配的l替换成L awk '{sub("l","L",$0) ; print $0}'
  • 获取字符串的长度:awk '{print length($1)}' ,length()不传参数,默认为整行的长度
  • 获取指定字符在字符串中的位置: awk '{print index("$0","AA")}'
  • 按指定字符分隔字符串:echo "1wa:2wa:3wa"|awk '{split($0,huluwa,":"); for(i in huluwa){print i,huluwa[i]}}'
  • 对数组排序:awk -v

其他用法

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

推荐阅读更多精彩内容

  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,219评论 2 25
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,567评论 0 4
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,457评论 0 9
  • 本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...
    楠人帮阅读 1,271评论 0 8
  • 报告生成器,格式化文本输出,常用选项: -F:指明输入时用到的字段分隔符 -v var=value:自定义变量 介...
    毛利卷卷发阅读 521评论 0 1