Linux-AWK命令使用详解

awk 是一个强大的文本处理工具,广泛用于分析和处理结构化文本数据。以下是 awk 的用法详解,包括基本语法、常用选项和实际应用示例。


基本语法

awk 'pattern {action}' file

  • pattern:模式匹配,可以是条件、正则表达式或范围。
  • action:对匹配行执行的操作(如打印、计算)。
  • file:输入文件。

如果省略 pattern,默认匹配所有行;如果省略 action,默认执行 print $0(输出整行)。


awk 内置变量

变量描述
$0当前行的全部内容。
$1, $2...当前行的第 1 列、第 2 列……,默认以空格或制表符分隔。
NR当前行号。
NF当前行的字段数。
FS输入字段分隔符,默认是空格或制表符。
OFS输出字段分隔符,默认是空格。
RS输入行分隔符,默认是换行符。
ORS输出行分隔符,默认是换行符。
FILENAME当前处理的文件名。

常用选项

选项作用
-F指定字段分隔符。
-v var=val定义用户变量。
-f script从脚本文件中读取 awk 程序。

示例详解

1. 打印文件的特定列

awk '{print $1, $3}' file.txt

  • 打印文件中每行的第 1 列和第 3 列。

2. 指定字段分隔符

awk -F',' '{print $1, $3}' file.csv

  • 使用逗号 , 作为分隔符,打印第 1 列和第 3 列。

3. 条件筛选

示例 1:筛选特定行

awk '$2 > 25 {print $0}' file.txt

  • 筛选第 2 列大于 25 的行。
示例 2:正则表达式匹配

awk '/Alice/ {print $0}' file.txt

  • 筛选包含 Alice 的行。

4. 统计行数和字段数

示例 1:统计行数

awk 'END {print NR}' file.txt

  • 输出文件的总行数。
示例 2:统计每行字段数

awk '{print "Line " NR ": " NF " fields"}' file.txt


5. 计算字段的总和

awk '{sum += $2} END {print "Total:", sum}' file.txt

  • 计算第 2 列的总和。

6. 修改分隔符

示例 1:改变输入字段分隔符

awk -F':' '{print $1, $3}' /etc/passwd

  • 以冒号 : 为分隔符,打印第 1 列和第 3 列。
示例 2:改变输出字段分隔符

awk -F',' 'BEGIN {OFS="|"} {print $1, $2}' file.csv

  • 使用逗号作为输入分隔符,输出用竖线 | 分隔。

7. 使用变量

示例 1:通过命令行传递变量

awk -v threshold=25 '$2 > threshold {print $0}' file.txt

  • 使用变量 threshold,筛选第 2 列大于 25 的行。
示例 2:在脚本中定义变量

awk 'BEGIN {x=10; print x*2}'

  • 输出 20

8. 输出行号和文件名

awk '{print FILENAME, NR, $0}' file.txt

  • 打印文件名、行号和行内容。

9. 多文件处理

awk '{print FILENAME, $0}' file1.txt file2.txt

  • 同时处理多个文件,每行显示文件名和内容。

10. 高级应用:统计与分组

示例 1:统计每个名称的次数

awk '{count[$1]++} END {for (name in count) print name, count[name]}' file.txt

示例 2:按组统计总和

awk '{sum[$1] += $2} END {for (name in sum) print name, sum[name]}' file.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值