插件窝 干货文章 linux awk命令怎么用

linux awk命令怎么用

print awk bash txt 870    来源:    2025-05-02

awk 是 Linux/Unix 中强大的文本处理工具,擅长按行和列处理结构化数据(如日志、CSV等)。以下是核心用法和示例:


1. 基本语法

awk 'pattern {action}' 文件名
  • pattern:匹配模式(可选,如 /regex/ 或条件表达式)
  • action:处理动作(如打印、计算等)

2. 常用场景

(1) 打印列

# 打印文件第1列和第3列(默认以空格/TAB分隔)
awk '{print $1, $3}' file.txt

# 指定分隔符(如逗号)
awk -F',' '{print $2}' data.csv

(2) 条件过滤

# 打印第2列大于100的行
awk '$2 > 100 {print $0}' file.txt

# 匹配包含"error"的行(正则)
awk '/error/ {print}' log.txt

# 多条件组合(&& 或 ||)
awk '$1 == "admin" && $3 <= 10 {print $2}' data.txt

(3) 内置变量

awk '{print NR, $0}' file.txt  # NR: 当前行号
awk 'END {print NF}' file.txt  # NF: 当前行的列数
awk -F',' '{print FILENAME, FNR}' data.csv  # FILENAME: 文件名;FNR: 文件内行号

(4) 计算统计

# 求和第3列
awk '{sum += $3} END {print sum}' data.txt

# 计算行数
awk 'END {print NR}' file.txt

# 分组统计(如按第1列分组求和)
awk '{count[$1] += $2} END {for (k in count) print k, count[k]}' data.txt

(5) 修改输出分隔符

awk -F',' -v OFS='|' '{print $1, $3}' data.csv  # 输出用"|"分隔

3. 高级用法

(1) BEGIN/END 块

# 预处理(BEGIN)和汇总(END)
awk 'BEGIN {print "Start"} {print $0} END {print "End"}' file.txt

(2) 自定义变量

awk '{total = $2 * $3; print $1, total}' sales.txt

(3) 多命令组合

awk '{if ($1 > 50) print $1; else print $2}' data.txt

(4) 调用系统命令

awk '{system("echo " $1)}' file.txt

4. 经典示例

(1) 统计日志中不同IP出现的次数

awk '{ip_count[$1]++} END {for (ip in ip_count) print ip, ip_count[ip]}' access.log

(2) 提取JSON中的字段(简单场景)

echo '{"name":"Alice","age":25}' | awk -F'"' '{print $4, $8}'

(3) 格式化输出

awk '{printf "Name: %-10s Score: %d\n", $1, $2}' scores.txt

5. 注意事项

  • 默认列分隔符是空格/TAB,使用 -F 指定其他分隔符。
  • $0 表示整行,$1$2... 表示第1、2列。
  • 结合 grepsort 等命令可更强大,如: bash grep "error" log.txt | awk '{print $3}' | sort -n

掌握这些用法后,awk 能高效解决大部分文本处理需求!