【笔记】Awk学习笔记

前言

Awk学习笔记

基本语法

1
awk 选项 优先级{处理方式} 文件

选项

指定列分隔符

  • 默认为空格符
1
awk -F "列分隔符" 优先级{处理方式} 文件

指定变量及其初始值

1
awk -v "变量名=变量值" 优先级{处理方式} 文件

优先级

BEGIN:标识处理数据流之前要做的事
PROGRAMME:标识处理数据流做的事
END:标识处理数据流之后要做的事

1
awk 选项 BEGIN{处理数据流之前}{处理数据流}END(处理数据流之后)

输出语句

输出指定列(字段)

$0:打印每一行的所有列
$N:打印每一行的第N列
$NF:打印每一行的最后列

1
awk '{print $0}' <file>

输出指定行(记录)

N:指定行

1
awk 'NR==N{print $0}'

指定列分隔符

  • 列分隔符默认为空格或制表符
  • 可以使用-F修改列分隔符
1
2
3
awk -F "分隔符" 'NR==N{print $0}'

awk -F分隔符 'NR==N{print $0}'

输出字符串

  • 在输出语句中添加字符串
1
awk '{print $1 "字符串" $2}' <file>

分隔多组数据

  • 使用,分隔多组数据,输出的结果会用一个空格进行分隔
  • 等价于添加空格字符串
1
2
3
awk '{print $1,$2}' <file>

awk '{print $1" "$2}' <file>

变量的定义和使用

1
awk '{变量名=变量值;print 变量名}' <file>

数组的的定义和使用

1
awk '{数组名[下标]=值;print 数组名[下标]}' <file>

运算

赋值运算

  • =

比较运算

  • ><==>=<=!=

  • 结果为真返回1,结果为假返回0

数学运算

  • +-*/%**++--

逻辑运算

  • &&||

模糊匹配运算

  • ~!~
1
2
awk '{变量~比较的数据}' <file>
awk '{变量!~比较的数据}' <file>

环境变量

  • 在处理数据之前的环境变量配置

指定列宽

1
awk 'BEGIN{FIELDWIDTHS="第一列列宽 第二列列宽 ..."}' <file>

指定源数据的列分隔符

  • 默认为空格符
1
awk 'BEGIN{FS="列分隔符"}' <file>

指定输出后的列分隔符

1
awk 'BEGIN{OFS="列分隔符"}' <file>

指定源数据的行分隔符

  • 默认为换行符
1
awk 'BEGIN{RS="行分隔符"}' <file>

指定输出后的行分隔符

1
awk 'BEGIN{ORS="行分隔符"}' <file>

流程语句

分支语句

单分支

1
2
3
4
awk '{
if (判断条件)
结果为真执行的语句
}' <file>
1
2
awk '{
if (判断条件)结果为真执行的语句}' <file>

双分支

1
2
3
4
5
6
awk '{
if (判断条件)
结果为真执行的语句
else
结果为假执行的语句
}' <file>
1
2
awk '{
if (判断条件)结果为真执行的语句;else 结果为假执行的语句}' <file>

循环语句

for循环

1
2
3
4
awk '{
for (i=0;i<循环次数;i++)
循环执行的语句
}' <file>
1
2
awk '{
for (i=0;i<循环次数;i++)循环执行的语句}' <file>

while循环

1
2
3
4
awk '{
while (循环条件)
循环执行的语句
}' <file>
1
2
awk '{
while (循环条件)循环执行的语句}' <file>

do…while循环

1
2
3
4
5
awk '{
do{
循环执行的语句
}while (循环条件)
}' <file>
1
awk '{do{循环执行的语句}while(循环条件)}' <file>

循环控制

break跳出循环

1
2
3
4
5
6
7
awk '{
while (循环条件)
循环执行的语句
if (判断条件)
结果为真执行的语句
break
}' <file>

完成

参考文献

哔哩哔哩——Python社区