linux 系统中,awk 最基础、最常用的语法与用法总结

awk 基本语法结构:

awk '匹配条件 { 满足条件时执行的操作 }' file_name

  • 匹配条件决定对哪些行执行操作,省略匹配条件就默认匹配所有行

  • 花括号里面的是操作块,配到的行会执行花括号 {} 内的内容

  • 默认使用空白字符(多个空格等价一个)作为分隔符,可使用 -F 指定分隔符

  • 使用单引号 ' ':是为了防止 Shell 提前将一些特殊字符给解释了。


awk 两种常见匹配模式

1、正则表达式匹配模式:

正则匹配模式就是让满足这个正则表达式的行,执行 action操作

awk '/正则表达式/' file,正则表达式要写在 /.../ 中,并且awk原生就支持扩展正则


例如:

# 打印root开头的行
cat /etc/passwd | awk -F : '/^root/ {print $0}'

2、字段表达式匹配模式

字段模式就是让 AWK 判断某一行是否满足某个条件,满足则执行 action

支持比较运算符:== != > < >= <=

支持逻辑运算符:&& || !


例如:

# 只打印第一列为 root 的行
awk '$1 == "root"' file

# 打印从第二行开始的内容
awk 'NR > 1' file

awk 最常用的操作:print

  • 无参数:打印整行(等价于 $0)

  • 有参数:打印指定字段,参数之间会使用 OFS(输出分隔符) 分隔,默认空格。


awk 常用内置变量

  • $0:表示整行内容

  • $n:当前行的第 n 个字段

  • NF:当前行字段数量(Number of Fields)

  • NR:当前的行号(Number of Record)


Shell 与 AWK 的变量桥接

由于 AWK 不能直接访问 Shell 的变量,需要使用 -v 选项将 Shell 变量传入 AWK:


例如:

path="/home/ehigh/work/html"
# 定义一个awk变量p,然后将shell变量path的值传递给它
# 如果第二段 等于 变量p的值,就执行 print 操作
awk -v p="$path" '$2 == p {print $1}' state.db

说明:awk 的变量使用时直接使用即可,不需要像 shell 变量一样使用 $ 符号进行变量拓展。

posted on 2025-12-04 18:51  一直小爪子  阅读(24)  评论(0)    收藏  举报