AWK学习笔记

来源:互联网 发布:手机淘宝网触屏版官网 编辑:程序博客网 时间:2024/04/30 18:20

AWK学习笔记

目录

  • AWK学习笔记
    • 简介
    • 基本使用方法
      • 格式
      • 调用方式
      • 命令部分的构成
      • 示例
    • 使用技巧待补充
    • 正则表达式待补充
    • 字符集待补充
    • awk内置变量待补充
    • awk内置函数待补充
    • awk转意字符待补充
            • 参考资料


简介

  1. awk是Unix环境下用于格式化文本,并按一定条件进行筛选显示的工具。
  2. awk以发展这种语言的人Aho.WeninbergerKernigham命名。

基本使用方法

格式

  1. 基本格式和说明:
    • awk [-F filed -separator] 'commands' input-files;
    • -F为可先项,后跟间隔符,默认以空格为间隔符;
    • commands为awk命令,包含模式和动作,如BEGINEND模式,动作需要包含在{}中,最常用的有{print $0};
    • input-files为输入的文本所在的文件。

调用方式

  1. 有三种方式可以调用awk
    • 在命令行中直接执行awk命令
    • awk命令写入文件,在shell环境下执行该文件
    • awk命令的commands部分写成awk脚本文件,通过-f选项调用awk脚本,如下所示:
      awk -f awk-script-file input-files

命令部分的构成

  1. '[模式] {动作}'
  2. BEGIN模式:为模式部分使用的关键字,用于表示在读取输入文本之前所做的动作。
  3. END模式:用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。
  4. awk中将文本用域进行标识,域标记为$1,$2...$n$0则表示所有域

  5. print动作:在commandsawk命令中使用,且因为是动作,所以需要包含在'{}'中,print之后跟的是需要输出的内容,可以按照一定的格式对域标记进行组合,如:awk {print $1"\t"$3}' input-files

  6. 输出重定向:
    • 重定向符号’>’,可将执行的输出重写到文件中,++但不会输出在屏幕++,且文件会被重写,可使用’>>’,则会从文件尾开始输入。
    • 还可使用tee命令,也是将输出重写到文件中,但有个好处是++可以输出到屏幕++,如果用-a参数则可以从文件尾开始输入。

示例

awk 'BEGIN {print "field1\t|field2\n--------------------"} >{print $1"\t|"$2}END{print "succ end"}' input-files
input-files文件中的内容:

a1 a2 a3b1 b2  b3

结果:

field1 |field2--------------------a1 |a2b1 |b2succ end

使用技巧(待补充)

  1. 定义多个分隔符,比如想要以‘()’作为分隔对文本‘name(lisa)’可以写为:
    awk -F'[()]' '{print $2}' input-files
    结果为:

    lisa

正则表达式(待补充)

  1. 条件操作符
操作符 描述 用法 < 小于 {if($1 < $2) print $0} > 大于 {if($1 > $2) print $0} <= 小于等于 {if($1 <= $2) print $0} >= 大于等于 {if($1 >= $2) print $0} == 等于 {if($1 == $2) print $0} != 不等于 {if($1 != $2) print $0} ~ 匹配 {if($1~ /aa/) print $1} !~ 不匹配 {if($1!~ /aa/) print $1}

2. 复合操作符

操作符 描述 用法 && 与 {if($1~/bb/ && $2~/aa/) print $0} || 或 ``{if($1~/bb/ || $2~/aa/) print $0} ! 非

字符集(待补充)

  1. 字符集:\ / ^ $ . [] & | () * + - ? % !
符号 描述 \ 转意字符 / 匹配符 ^ 表示行首或域首 $ 域标识符 . 占位符 [] 单字符包含匹配 | 或 () 条件 * + 匹配一个或多个字符 ? 出现频率

awk内置变量(待补充)

变量符 描述 ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行- F选项 NF 浏览记录的域个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符

awk内置函数(待补充)

函数名 描述 gsub(x,y) 在每条记录中用y替代x gsub(x,y,z) 在整个z中用y替代x index(x,y) 返回x中字符串y的第一位置 length(x) 返回x长度 match(x,y) 测试x是否包含匹配y的字符串 split(s,a,fs) 在fs上将s分成序列a sprint(fmt,exp) 返回经fmt格式化后的exp sub(x,y,z) 在z所示的域中用y字符串代替x表达式匹配的子串 substr(s,p) 返回字符串s中从p开始的后缀部分 substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分 printf(fmt,s,…) 格式化输出字符串s,可以有多个s参数

awk转意字符(待补充)

  1. 可以通过使用‘\’来对特殊字符进行转意,如果字符串中需要显示{,则可以使用'\{'

参考资料

[1]: 《SHELL编程入门》:第9章 AWK介绍;
[2]: 《UNIX? Shells by Example Fourth Edition》:Chapter 6;
[3]: 【UNIX/LINUX 系统操作手册】:[man awk];

0 0