AWK 是一种强大的文本处理工具,常用于行和列的处理,特别适合结构化数据文件(如 CSV 文件)的数据处理。以下是一些 AWK 常用方法和示例。
AWK 的基本语法格式如下:
awk 'pattern { action }' filename
AWK 中的字段变量 $1, $2, ... 表示文件中各列的数据。
jsawk '{ print \$1 }' filename
打印第一列和第三列:
awk '{ print \$1, \$3 }' filename
打印所有列:
awk '{ print \$0 }' filename
这里 \$0 代表整行内容。
AWK 可以通过条件来选择符合要求的行并执行操作。
js打印所有包含 "apple" 的行:
awk '/apple/ { print }' filename
打印第二列大于 100 的行:
awk '\$2 > 100 { print \$1, \$2 }' filename
打印第一列为 "John" 的行:
awk '\$1 == "John" { print }' filename
AWK 提供了多个内建变量来帮助进行文本处理:
默认情况下,AWK 使用空格或制表符作为字段分隔符。你可以使用 -F 选项来指定不同的分隔符。
使用逗号作为字段分隔符:
jsawk -F, '{ print \$1, \$2 }' filename
使用冒号作为字段分隔符:
awk -F: '{ print \$1, \$2 }' filename
AWK 可以用于对字段数据进行数学计算。
js示例:计算第一列的总和
awk '{ sum += \$1 } END { print sum }' filename
示例:计算第一列的平均值
awk '{ sum += \$1; count++ } END { print sum/count }' filename
AWK 可以同时处理多个文件:
jsawk '{ print FILENAME ": " \$0 }' file1 file2
此命令将打印每个文件的文件名和内容。
BEGIN 和 END 块可以用于在处理文件之前或之后执行操作。
js示例:在处理文件前输出标题
awk 'BEGIN { print "Processing File..." } { print \$1 }' filename
示例:在处理完所有文件后执行操作
awk 'BEGIN { sum=0 } { sum += \$1 } END { print "Total Sum: " sum }' filename
AWK 支持使用正则表达式进行模式匹配,帮助更灵活地筛选数据。
js示例:匹配所有以 "A" 开头的行
awk '/^A/ { print }' filename
示例:匹配包含数字的行
awk '/[0-9]/ { print }' filename
$NF 是 AWK 中的一个特殊变量,用来表示当前行的 最后一个字段。
js示例:打印每行的最后一个字段
awk '{ print $NF }' filename
示例:计算每行最后两个字段的和
awk '{ print $NF + $(NF-1) }' filename
示例:使用 $NF 进行条件判断
awk '$NF > 10 { print \$0 }' filename
AWK 支持格式化输出,类似于 C 语言的 printf 函数。
js示例:格式化输出为两列
awk '{ printf "%-10s %-5s\n", \$1, \$2 }' filename
%10s:表示字符串输出,宽度为 10。
%-5s:表示字符串输出,宽度为 5,左对齐。
本文作者:lzix
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!