awk
是一个强大的文本处理工具,最初用于 Unix 系统,现在也可以在类 Unix 系统(如 Linux 和 macOS)上使用。它允许你执行复杂的文本处理任务而不需要编写完整的程序。下面是一些基本概念以及 awk
的使用规则:
基本语法
awk
命令的基本形式是:
awk 'pattern {action}' [file ...]
pattern
定义了一个模式,用来匹配输入行。{action}
是当模式匹配成功时执行的一系列命令。[file ...]
是需要处理的一个或多个文件名。如果没有指定文件,则awk
从标准输入读取数据。
常用选项
-F fs
设置字段分隔符为fs
。-v var=val
在awk
程序中定义变量var
并赋值为val
。-f script-file
指定一个脚本文件来代替直接在命令行上写awk
程序。
内置变量
awk
提供了许多内置变量,用于简化文本处理任务:
ARGV
包含命令行参数。ARGC
包含命令行参数的数量。ARGIND
当前正在处理的文件在ARGV
中的位置。FILENAME
当前输入文件的名字。NR
记录号,即处理了多少行。NF
字段数,即当前行有多少个字段。RS
记录分隔符,默认为换行符。FS
字段分隔符,默认为空白字符(空格或制表符)。OFS
输出字段分隔符,默认为空格。ORS
输出记录分隔符,默认为换行符。
示例
- 打印第二列:
awk '{print $2}' file
- 设置字段分隔符为逗号,并打印第一列:
awk -F, '{print $1}' file
- 统计文件中的行数:
awk 'END{print NR}' file
- 统计每行的单词数:
awk '{print NF}' file
- 统计所有数字的总和(假设所有行都是数字):
awk '{sum += $1} END{print sum}' file
复杂操作
awk
还支持条件语句、循环、函数定义等,可以实现非常复杂的逻辑。例如:
awk '
BEGIN { sum = 0 }
{
if ($1 ~ /^[0-9]+$/) # 如果第一列是数字
sum += $1
}
END {
print "Total:", sum
}' file
以上只是一个简要介绍,awk
的功能远不止这些。为了更深入地学习 awk
,建议查阅官方文档或者相关书籍。