美文网首页
awk学习总结

awk学习总结

作者: vilian_acfc | 来源:发表于2019-06-05 15:45 被阅读0次

简介

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

其他用法

相关文章

  • awk学习总结

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

  • sed和awk学习总结

    sed和awk学习总结 一些说明 我测试例子都是在mac os x下,freebsd的sed和awk和gnu的都略...

  • 《Linux实践技能》学习笔记 day08

    awk学习总结 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创...

  • Linux三剑客(grep sed awk) 之 awk

    awk awk****推荐去看朱双印的博客“awk****从放弃到入门”,写的真的很好,本文的awk****就总结...

  • 2017 09-04 AWK

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

  • awk总结

    1.实验的文本 awk_test.txt 开头为1,2,3,各有五行。其中有些行的$6$7$8字段为空 2. aw...

  • awk 总结

    写在前面 本篇是个人学习整理笔记而得。原书:Sed and Awk 101 Hacks -中文版引用书结尾的一句话...

  • awk总结

  • 文本处理命令(二)——awk学习总结

    上篇学习了grep文本处理工具,这篇总结下另一款更强大的处理工具awk。AWK 是一种解释执行的编程语言。它非常的...

  • Awk 命令学习总结、AWk命令系列学习(linux shell

    前面的话 学习linux 的同人,都知道linux shell文本处理能力非常强大。有一组强大的文本处理工具:gr...

网友评论

      本文标题:awk学习总结

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