AWK使用总结4

345 阅读2分钟

引言

  • 本文主要介绍AWK中Script & Pattern定义以及控制输出格式化的内置变量(OFS,ORS)介绍,仅供参考。

Script & Pattern

  • 脚本(Script)组成指的是命令行中的program部分,可以成为awk代码也可以称为awk脚本,其格式为pattern{action}
  • 模式(Pattern)主要有以下四种
    • ERE(Extended Regular Expression)扩展的正则表达式,其实就是上篇文章写的那个参数-F ERE里的ERE
    • 关系表达式:例如大于,小于,等于来进行匹配
    • pattern,pattern:模式对,匹配两者之间的所有记录。
    • BEGIN,END特殊模式(前面已经讲过这两个的用法)
  • 以下为一个.awk脚本的例子(包含自定义函数以及如何使用-f参数来执行awk脚本)
  • 自定义函数用法:function name(parameter list) { statements }
    • 注1:函数的参数列表(statements中)用逗号分隔,内部的参数默认是局部变量,无法在函数之外访问,而在函数中(parameter list)定义的变量为全局变量,可以在函数之外访问
    • 注2:如果句子太长awk脚本中也可以使用\来进行换行
# c.awk脚本内容
function test(a)
{
    b=a
    print "This is a very long line, so use backslash to escape the newline \
then we will print the variable a: a=" a
} 

{ print b; test("gedun.me"); print b;}

# 执行命令
echo 1 | awk -f c.awk

  • 上述awk脚本代码也可以直接在命令行写

内置变量(补上篇未介绍的内置变量)

  • 内置变量OFS:输出字段分割符,默认为空格,
    • 比如输入文件数据是以空格分割,而输出需要以"-"分割,可以使用OFS进行格式化输出
awk 'BEGIN{FS=" ";OFS="---"}{print $1,$2,$3}' a.txt 

  • 内置变量ORS:输出行分割符,默认的是换行符,
    • 类比OFS,对输出格式有要求时,可以进行格式化输出
awk 'BEGIN{ORS=","}{print}' b.txt
  • 输出不知道为啥和命令行重合了