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 变量一样使用 $ 符号进行变量拓展。
浙公网安备 33010602011771号