编辑
2024-11-25
文本三剑客
00
请注意,本文编写于 58 天前,最后修改于 49 天前,其中某些信息可能已经过时。

目录

AWK 常用方法总结
1. AWK 基本语法
3. 打印特定列
4. 条件匹配
5. 内建变量
6. 设置字段分隔符
7. 计算字段的和、平均值等
8. 处理多个文件
9. 使用 BEGIN 和 END 块
10. 使用正则表达式进行模式匹配
11. 使用 $NF 引用最后一个字段
12. 输出格式化

AWK 常用方法总结

AWK 是一种强大的文本处理工具,常用于行和列的处理,特别适合结构化数据文件(如 CSV 文件)的数据处理。以下是一些 AWK 常用方法和示例。

1. AWK 基本语法

AWK 的基本语法格式如下: awk 'pattern { action }' filename

3. 打印特定列

AWK 中的字段变量 $1, $2, ... 表示文件中各列的数据。

js
awk '{ print \$1 }' filename 打印第一列和第三列: awk '{ print \$1, \$3 }' filename 打印所有列: awk '{ print \$0 }' filename 这里 \$0 代表整行内容。

4. 条件匹配

AWK 可以通过条件来选择符合要求的行并执行操作。

js
打印所有包含 "apple" 的行: awk '/apple/ { print }' filename 打印第二列大于 100 的行: awk '\$2 > 100 { print \$1, \$2 }' filename 打印第一列为 "John" 的行: awk '\$1 == "John" { print }' filename

5. 内建变量

AWK 提供了多个内建变量来帮助进行文本处理:

  • NR:当前行号(记录数)。
  • NF:当前行的字段数量(列数)。
  • FS:输入字段分隔符,默认为空格或制表符。
  • OFS:输出字段分隔符,默认为空格。 示例:打印行号和每行的字段数 bash awk '{ print NR, NF, $0 }' filename

6. 设置字段分隔符

默认情况下,AWK 使用空格或制表符作为字段分隔符。你可以使用 -F 选项来指定不同的分隔符。

使用逗号作为字段分隔符:

js
awk -F, '{ print \$1, \$2 }' filename 使用冒号作为字段分隔符: awk -F: '{ print \$1, \$2 }' filename

7. 计算字段的和、平均值等

AWK 可以用于对字段数据进行数学计算。

js
示例:计算第一列的总和 awk '{ sum += \$1 } END { print sum }' filename 示例:计算第一列的平均值 awk '{ sum += \$1; count++ } END { print sum/count }' filename

8. 处理多个文件

AWK 可以同时处理多个文件:

js
awk '{ print FILENAME ": " \$0 }' file1 file2 此命令将打印每个文件的文件名和内容。

9. 使用 BEGIN 和 END 块

BEGIN 和 END 块可以用于在处理文件之前或之后执行操作。

js
示例:在处理文件前输出标题 awk 'BEGIN { print "Processing File..." } { print \$1 }' filename 示例:在处理完所有文件后执行操作 awk 'BEGIN { sum=0 } { sum += \$1 } END { print "Total Sum: " sum }' filename

10. 使用正则表达式进行模式匹配

AWK 支持使用正则表达式进行模式匹配,帮助更灵活地筛选数据。

js
示例:匹配所有以 "A" 开头的行 awk '/^A/ { print }' filename 示例:匹配包含数字的行 awk '/[0-9]/ { print }' filename

11. 使用 $NF 引用最后一个字段

$NF 是 AWK 中的一个特殊变量,用来表示当前行的 最后一个字段。

js
示例:打印每行的最后一个字段 awk '{ print $NF }' filename 示例:计算每行最后两个字段的和 awk '{ print $NF + $(NF-1) }' filename 示例:使用 $NF 进行条件判断 awk '$NF > 10 { print \$0 }' filename

12. 输出格式化

AWK 支持格式化输出,类似于 C 语言的 printf 函数。

js
示例:格式化输出为两列 awk '{ printf "%-10s %-5s\n", \$1, \$2 }' filename %10s:表示字符串输出,宽度为 10。 %-5s:表示字符串输出,宽度为 5,左对齐。

本文作者:lzix

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!