Linux三剑客之awk

一、awk简介

awk:根据定位到的数据进行分段
awk是Linux下的一个命令,同时也是一种语言解析引擎
awk具备完整的编程特性,比如执行命令,网络请求
精通awk,是Linux工作者的必备技能

二、awk基本语法

  • 语法:awk ‘pattern{action}’

2.1 awk上下文变量

  • 开始BEGIN介绍END
  • 行数NR
  • 字段与字段数$1,$2,…$NF NF
  • 整行$0
  • 字段分隔符FS
  • 输出数据的字段分割符OFS
  • 记录分割符RS
  • 输出字段的行分割符ORS

2.2字段变量用法

  • -F参数指定字段分隔符,也可以使用|指定多个-多分隔符-F’<|>
  • BEGIN{FS=“_”}也可以表示分隔符
  • $0表示当前字段
  • $1表示第一个字段
  • $N表示第n个字段
  • $NF表示最后一个字段
  • $(NF-1)表示倒数第二个字段

2.3 pattern表达式

  • 正则匹配$1~/pattern/ /pattern/
  • 比较表达式 $2>2 $1== “b”
    image

2.4 awk pattern匹配表达式案例

  • 开始和介绍:awk ‘BEGIN{} END{}’
  • 正则匹配:
    • 整行匹配:awk ‘/running/’
    • 字段匹配:awk ‘$2~/xxx/’
  • 行数表达式
    • 取第二行:awk ‘NR==2’
    • 去掉第一行:awk ‘NR>1’
  • 区间选择
    • awk ‘/aa/,/bb/’
    • awk ‘/1/,NR==2’

2.5 行为表达式{action}

  • 打印:{print $0}{print $2}
  • 赋值:{$1=“abc”}
  • 处理函数
  • 原始内容:$0
  • 更新后内容:{$1=$1;print $0}

案例

  • 单行转多行:echo 1:2:3 | awk ‘BEGIN{RS=“:”}{print $0}’
    image
  • 多行变单行:
    echo ‘1
    2
    3’ | awk ‘BEGIN{RS=“”;FS=“\n”;OFS=“:”}{$1=$1;print $0}’
    image
  • 计算平均数
    awk ‘BEGIN{total=0;FS=", "}{total+=$3}END{print total/NR}’

三、awk的词典结构array

awk是稀疏矩阵,类似于Python的字典结构
image

官网地址: The GNU Awk User’s Guide