Linux awk 命令详解
Linux awk 命令是 Unix 环境中的一种功能强大的文本处理工具,由 Bell Labs 的 Alfred Aho、Peter Weinberger 和 Brian Kernighan 于 1977 年开发。awk 命令的主要功能是从文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。
awk 语言的基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。awk 命令可以用来格式化文本文件中的信息。
awk 命令有三种版本:awk、nawk 和 gawk,通常情况下,awk 指的是 gawk。
调用 awk 命令有三种方式:
1. awk [option] 'awk_script' input_file1 [input_file2 ...]
awk 的常用选项 option 有:
① -F fs : 使用 fs 作为输入记录的字段分隔符,如果省略该选项,awk 使用环境变量 IFS 的值
② -f filename : 从文件 filename 中读取 awk_script
③ -v var=value : 为 awk_script 设置变量
2. 将 awk_script 放入脚本文件并以 #!/bin/awk -f 作为首行,给予该脚本可执行权限,然后在 shell 下通过键入该脚本的脚本名调用之。
3. 将所有的 awk_script 插入一个单独脚本文件,然后调用:awk -f awk 脚本文件 input_file(s)
awk 的运行过程:
1. awk_script 的组成:awk_script 可以由一条或多条 awk_cmd 组成,两条 awk_cmd 之间一般以 NEWLINE 分隔。
awk_cmd 由两部分组成:awk_pattern { actions }
awk_script 可以被分成多行书写,必须确保整个 awk_script 被单引号括起来。
2. awk 命令的一般形式:
awk 'BEGIN { actions } awk_pattern1 { actions } ............ awk_patternN { actions } END { actions }' inputfile
其中 BEGIN { actions } 和 END { actions } 是可选的。
3. awk 的运行过程:
① 如果 BEGIN 区块存在,awk 执行它指定的 actions。
② awk 从输入文件中读取一行,称为一条输入记录。(如果输入文件省略,将从标准输入读取)
③ awk 将读入的记录分割成字段,将第 1 个字段放入变量 $1 中,第 2 个字段放入 $2,以此类推。 $0 表示整条记录。字段分隔符使用 shell 环境变量 IFS 或由参数指定。
④ 把当前输入记录依次与每一个 awk_cmd 中的 awk_pattern 比较,看是否匹配,如果相匹配,就执行对应的 actions。如果不匹配,就跳过对应的 actions,直到比较完所有的 awk_cmd。
⑤ 当一条输入记录比较了所有的 awk_cmd 后,awk 读取输入的下一行,继续重复步骤③和④,这个过程一直持续,直到 awk 读取到文件尾。
⑥ 当 awk 读完所有的输入行后,如果存在 END,就执行相应的 actions。
awk_pattern 模式部分决定 actions 动作部分何时触发及触发 actions。awk_pattern 可以是以下几种类型:
1. 正则表达式用作 awk_pattern:/regexp/
awk 中正则表达式匹配操作中经常用到的字符:
\ ^ $ . [] | () * /
通用的 regexp 元字符 + : 匹配其前的单个字符一次以上,是 awk 自有的元字符,不适用于 grep 或 sed 等?
: 匹配其前的单个字符 1 次或 0 次,是 awk 自有的元字符,不适用于 grep 或 sed 等
awk 命令的输出默认为标准输出,如果想让 awk 输出到文件,可以使用重定向。