Linux 中 awk 命令使用

🧠 基础概念

awk 是什么?

awk 是一种强大的文本处理工具,擅长格式化文本、数据提取、报表生成等。

基本结构:

awk 'pattern { action }' filename

工作方式:

  • 逐行读取文本
  • 每行按字段分割(默认按空格或Tab)
  • 根据 pattern 匹配并执行 {action} 语句块

🧱 常用语法

1️⃣ 默认变量

变量 含义
$0 当前整行内容
$1~$n 第1到第n个字段(默认空格分隔)
NR 当前记录的行号(Number of Record)
NF 当前行的字段个数(Number of Fields)
FS 输入字段分隔符(默认空格)
OFS 输出字段分隔符(默认空格)

🧪 使用示例

1. 打印指定字段

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

2. 条件筛选行

awk '$3 > 80 {print $1, $3}' scores.txt

3. 设置字段分隔符

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

4. 输出字段用逗号分隔

awk 'BEGIN{OFS=","} {print $1, $2}' file.txt

5. 统计行数

awk 'END{print NR}' file.txt

6. 求和(如第2列数值总和)

awk '{sum += $2} END {print sum}' file.txt

7. 求平均值

awk '{sum += $2} END {print sum/NR}' file.txt

🔧 进阶功能

1. BEGIN / END 块

awk 'BEGIN{print "Start"} {print $1} END{print "Done"}' file.txt

2. 多条件匹配(if 语句)

awk '{if ($2 > 90) print $1, "优秀"}' scores.txt

3. 使用变量

awk -v threshold=60 '{if ($2 > threshold) print $1}' scores.txt

4. 正则匹配

awk '$1 ~ /test/ {print $0}' file.txt

🛠 常用技巧

打印非空行

awk 'NF > 0' file.txt

处理CSV文件(逗号分隔)

awk -F ',' '{print $2}' data.csv

替换特定字段值

awk '{$2="REPLACED"; print}' file.txt

多文件处理

awk 'FNR==1{print FILENAME} {print $0}' file1.txt file2.txt

📦 awk 脚本保存形式

可写成 .awk 文件,如 myscript.awk

#!/usr/bin/awk -f
{
  print $1, $2
}

执行:

chmod +x myscript.awk
./myscript.awk file.txt

📚 推荐练习方向

  • 日志分析(如 nginx、系统日志)
  • 简易报表统计
  • 配合管道命令如 grep、sort、uniq
  • 与 shell 脚本组合使用
posted @ 2025-06-30 15:57  槑孒  阅读(60)  评论(0)    收藏  举报