一.流编辑器AWK
- 用于对文件和数据进行处理,数据可以来自标准输入
- 支持用户自定义函数和动态正则表达式
- 其是逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并进行操作
命令的格式:
awk [参数] '命令' 输入的文件
1.AWK工作原理
AWK的工作流程:
- 读输入文件之前执行的代码段(由BEGIN关键词标识)
- 主循环执行输入文件的代码段
- 读输入文件之后的代码段(由END关键词标识)
命令结构:
awk 'BEGIN{ 命令 } 模式 { 命令 } END{ 命令 }'
注意:
BEGIN和END都要大写;
在执行过程中只执行一次;
这两个结构可以有也可以没有;
在文件中写脚本也是这个格式,只是没有awk;
2.AWK参数
参数 | 说明 |
---|---|
-F fs | 指定输入文件折分隔符,fs可以是字符串或者是正则表达式 |
-v var=value | 赋值一个用户自定义变量 |
-f | 从脚本文件中读取awk命令 |
其中正则表达式是以~符号开始,/ /符号中是正则表达式
3.AWK变量
1.内置变量
变量 | 描述 |
---|---|
$n | 当前记录中是第n个字段,字段间由FS分割 |
$0 | 完整的输入记录 |
FS | 字段分隔符(默认为空格) |
外部变量:
使用外部变量参数需要使用到gsub关键词
var="bash"
# 当为双引号时
echo "unix script" | awk "gsub(/unix/,\"$var\")"
# 当为单引号时,需要将变量上的单引号用双引号包起来
echo "unix script" | awk 'gsub(/unix/,"'"$var"'")'
4.AWK条件语句和循环
1.if语句
# 只有一条命令时
if (条件)
命令
##
if (条件)
命令
else
命令
# 有多个命令
if (条件)
{
命令;
命令;
...
}
##
if (条件)
{
命令;
命令;
...
}
else
{
命令;
命令;
...
}
2.for循环
for ( ; ; )
{
命令1
命令2
...
}
3.while循环
while(条件)
{
命令1
命令2
...
}