Linux 文本三剑客 awk
1. 命令简介
awk
是一个强大的文本处理工具,它用于在 Linux 和 Unix 系统中进行模式扫描和处理。🛠️ 使用 awk
,你可以轻松地从文件或标准输入中提取和处理数据,并进行复杂的文本操作。它非常适合处理结构化的文本数据,如 CSV 文件、日志文件、表格数据等。📊
awk
支持条件判断、循环、变量和内建函数,使它成为文本处理和报告生成的利器!💪
2. 命令语法
awk 'pattern { action }' file
pattern
:定义要匹配的模式,可以是字符串、正则表达式或条件。action
:在匹配到模式时执行的操作,通常是打印或处理某些字段。file
:输入的文件,可以省略,表示从标准输入读取数据。
2.1 基本用法
awk '{print $1}'
:打印每行的第一个字段。awk '{print $1, $3}'
:打印每行的第一个和第三个字段。awk '{print $0}'
:打印每行的所有内容。
3. 常见选项
-F
:指定字段分隔符,默认为空格或制表符(tab)。-v
:定义变量并传递给awk
脚本。-f
:从文件中加载awk
脚本。
4. 命令示例
4.1 打印每行的第一个字段
假设有一个文件 data.txt
,内容如下:
Alice 30
Bob 25
Charlie 35
使用 awk
打印每行的第一个字段:
$ awk '{print $1}' data.txt
输出:
Alice
Bob
Charlie
4.2 打印每行的第一个和第二个字段
$ awk '{print $1, $2}' data.txt
输出:
Alice 30
Bob 25
Charlie 35
4.3 使用分隔符
默认情 况下,awk
使用空格或制表符作为字段分隔符。如果数据使用逗号分隔,你可以通过 -F
选项指定分隔符。例如,假设文件 data.csv
内容如下:
Alice,30
Bob,25
Charlie,35
使用逗号作为字段分隔符:
$ awk -F, '{print $1, $2}' data.csv
输出:
Alice 30
Bob 25
Charlie 35
4.4 条件语句
awk
可以结合条件语句来处理数据。例如,假设你只想打印年龄大于 30 的人的名字:
$ awk '$2 > 30 {print $1}' data.txt
输出:
Charlie
4.5 使用内建变量
awk
提供了多个内建变量,可以帮助你处理数据:
NR
:当前记录的行号。NF
:当前记录的字段数。$0
:整行文本。
例如,打印文件的每一行并附加行号:
$ awk '{print NR ": " $0}' data.txt
输出:
1: Alice 30
2: Bob 25
3: Charlie 35
4.6 计算总和
假设你有一个包含数值的文件 scores.txt
:
50
75
80
60
你可以用 awk
来计算总和:
$ awk '{sum += $1} END {print sum}' scores.txt
输出:
265
这里,sum += $1
表示累加每一行的数值,END
块表示在文件结束时打印结果。
4.7 使用 awk
处理复杂的格式
你也可以使用 awk
来生成更复杂的输出格式。例如,假设你有一个文件 students.txt
:
Alice 90 80 85
Bob 75 60 70
Charlie 85 95 90
你可以计算每个学生的平均分,并按格式输出:
$ awk '{avg = ($2 + $3 + $4) / 3; print $1, "Average:", avg}' students.txt
输出:
Alice Average: 85
Bob Average: 68.3333
Charlie Average: 90