自学内容网 自学内容网

带你了解linux:学习第十一课 linux 之 awk

awk 是一种强大的文本处理工具,在 Linux 和 Unix 系统中广泛使用。它能够对文本文件进行模式扫描和处理,非常适合用来执行复杂的文本操作。

基本语法

awk 的基本语法如下:

awk [options] 'pattern-action' file(s)

或者

awk [options] program file(s)
  • options:可选参数。
  • pattern-action:模式和动作对,用单引号括起来。
  • program:一系列模式和动作对,用大括号括起来。
  • file(s):要处理的文件。

参数

  1. -F fs--field-separator fs: 设置字段分隔符为 fs

    例子

    echo "one:two:three" | awk -F: '{print $1, $3}'

    输出 one three,使用冒号作为字段分隔符。

  2. -v var=value: 赋值给 awk 程序变量。

    例子

    echo "hello world" | awk -v var="Earth" 'BEGIN{print "Hello " var}'

    输出 Hello Earth,将变量 var 设置为 Earth

  3. -f scriptfile--file scriptfile: 从 scriptfile 读取 awk 程序。

    例子

    # script.awk 内容如下:
    # {print $1}
    echo "one two three" | awk -f script.awk

    输出 one,从外部文件读取 awk 程序。

  4. -W compact: 使用紧凑模式,减少内存占用。

    例子

    awk -W compact ...

    用于处理大文件,减少内存使用。

  5. -W help: 显示 gawk 的帮助信息。

  6. -W version: 显示 gawk 的版本信息。

  7. -W: 显示所有 gawk 的内置变量及其值。

模式和动作

  • 模式: 可以是正则表达式,也可以是范围(如 3,5 表示行号3到5)。

  • 动作: 在模式匹配时执行的一系列命令。

例子

awk '/^pattern$/ {action}'

如果行匹配正则表达式 pattern,则执行 action

内置变量

  • NF:当前记录的字段总数。
  • NR:当前处理的记录总数。
  • FS:字段分隔符,默认为空格。
  • RS:记录分隔符,默认为换行符。
  • OFS:输出字段分隔符,默认与 FS 相同。
  • ORS:输出记录分隔符,默认与 RS 相同。

例子

  1. 打印第二列

    echo "one two three" | awk '{print $2}'

    输出 two

  2. 计算行数

    echo -e "one\ntwo\nthree" | awk '{print NR, $0}'

    输出:

    1 one
    2 two
    3 three
  3. 替换文本

    echo "I love apples" | awk '{gsub(/apple/, "orange"); print}'

    输出 I love orange

  4. 使用字段分隔符

    echo "one,two,three" | awk -F, '{print $1, $3}'

    输出 one three

  5. 计算列的总和

    echo -e "1 2 3\n4 5 6" | awk '{sum += $1 + $3; count++}
    END {print "Sum is", sum, "for", count, "lines"}'

    输出:

    Sum is 10 for 2 lines
  6. 条件语句

    echo -e "apple\nbanana\ncherry" | awk '{if ($1 ~ /b/) print}'

    输出:

    banana

awk 的功能非常强大,可以通过组合不同的模式、动作和内置变量来执行复杂的文本处理任务。这里只对awk的一些简单用法和使用做了举例,awk还有很多更灵活更强大的功能,等待你的发觉和探索


原文地址:https://blog.csdn.net/jianjiuhuang999/article/details/142753580

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!