GAWK-使用技巧

介绍

gawk 是 Unix 中原始的 awk 程序的 GNU 版本. 其提供了一种编程语言而不只是编辑器命令. 如:

  • 定义变量
  • 算术和字符串操作符
  • 结构化语句
  • 格式化输出

基本使用

语法格式:

1
gawk options program file

常用选项:

  • -F fs, --field-separator, 指定行字段分隔符, 默认是空白字符
  • -f file, 从文件读取命令
  • -v var=value, 定义变量
  • -W keyword, 指定警告等级

命令需放在花括号和单引号中, 如:

1
gawk '{print "Hello World!"}'

运行后会要求从 STDIN 获取输入.

而匹配位于 program 之前:

1
gawk '/hello/{print "Hello World!"} test.txt'

将文本打印到 STDOUT

print 命令:

1
gawk '{print "Hello World!"}'

数据字段变量

gawk 会将文本行中的一些数据分配给如下变量:

  • $0, 整个文本行
  • $1, 文本行中的第一个数据字段
  • $2, 文本行中的第二个数据字段
  • $n, 文本行中的第 n 个数据字段

如文本为:

1
2
3
4
$ cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.

打印每行第一个字段:

1
gawk '{print $1}' data2.txt

修改某一个字段:

1
$ echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

在处理数据前运行一段脚本

1
$ gawk 'BEGIN {print "Hello World!"} {print $0}' data3.txt

在处理数据后运行一段脚本

1
$ gawk 'END {print "End of File"} {print $0}' data3.txt

在 BEGIN 中设置变量

1
$ gawk 'BEGIN {FS=":"} {print $0}'

gawk 支持的正则表达式

字符匹配:

    .:匹配任意单个字符。
    [abc]:匹配字符集中的任意一个字符(a、b 或 c)。
    [^abc]:匹配除字符集中的任意一个字符(a、b 或 c)之外的任意字符。
    [a-z]:匹配字符范围内的任意一个小写字母。
    [A-Z]:匹配字符范围内的任意一个大写字母。
    [0-9]:匹配字符范围内的任意一个数字。
    [:alnum:]:匹配任意字母或数字字符。
    [:alpha:]:匹配任意字母字符。
    [:blank:]:匹配空格或制表符。
    [:digit:]:匹配任意数字字符。
    [:lower:]:匹配任意小写字母字符。
    [:upper:]:匹配任意大写字母字符。
    [:space:]:匹配任意空白字符(空格、制表符、换行符等)。
    [:punct:]:匹配任意标点符号字符。
    [:xdigit:]:匹配任意十六进制数字字符。

重复匹配:

    *:匹配前一个元素零次或多次。
    +:匹配前一个元素一次或多次。
    ?:匹配前一个元素零次或一次。
    {n}:匹配前一个元素恰好 n 次。
    {n,}:匹配前一个元素至少 n 次。
    {n,m}:匹配前一个元素至少 n 次但不超过 m 次。

锚点和边界:

    ^:匹配行的开头位置。
    $:匹配行的结尾位置。
    \b:匹配单词边界。
    \B:匹配非单词边界。

分组和引用:

    ():将多个元素组合成一个子表达式。
    \n:引用第 n 个子表达式(n 是一个数字)。

转义字符:

    \:转义特殊字符

GAWK-使用技巧
http://example.com/2024/03/08/GAWK-使用技巧/
作者
Jie
发布于
2024年3月8日
许可协议