awk 是一款极其强大的文本处理工具,其语言于c语言的语法极其相似,上手很容易
内置变量与运算符数据来自RUNOOB
简单用法
1
2awk [参数] 'awk代码'
awk [参数] -f awk脚本文件常用参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15cat xxx.txt | awk -F ':' 'BEGIN{}{printf("%s %s", $1, $2);}END{printf("OK!");}'
# -F 参数是指定对每行字符串以什么字符为分割,每个被分割的部分存储在变量:$1, $2, $3...中,整行字符串存储在$0中。
# BEGIN{}中的代码将在文本处理前执行,同样,END{}会文本处理后执行,{}中的代码用来处理每行的文本。
cat xxx.txt | awk -v var1=${tmp} '{printf("%d\n", $3/var1);}'
# -v 参数是引入外部变量,把${tmp}赋值给var1,在awk内部代码中就可以使用var1了。
# -v参数可以多次引用,也就是说可以引入多个变量。
cat xxx | awk -v var1=${tmp} '{
if ($1 ~ /eth/) {
print $0;
}
}'
# 通过这种方式可以使用正则表达式进行字符串匹配。
# awk支持print,使用print末尾自动加上\n。内置变量
变量 | 描述 |
---|---|
$n | 当前记录的第n个字段,字段间由FS分隔 |
$0 | 完整的输入记录 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置(从0开始算) |
ARGV 包含命令行参数的数组 | |
CONVFMT | 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
FNR | 各文件分别计数的行号 |
FS | 字段分隔符(默认是任何空格) |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
NF | 一条记录的字段的数目 |
NR | 已经读出的记录数,就是行号,从1开始 |
OFMT | 数字的输出格式(默认值是%.6g) |
OFS | 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符 |
ORS | 输出记录分隔符(默认值是一个换行符) |
RLENGTH | 由match函数所匹配的字符串的长度 |
RS | 记录分隔符(默认是一个换行符) |
RSTART | 由match函数所匹配的字符串的第一个位置 |
SUBSEP | 数组下标分隔符(默认值是/034) |
- 运算符
运算符 | 描述 |
---|---|
= += -= *= /= %= ^= **= | 赋值 |
?: | C条件表达式 |
|| | 逻辑或 |
&& | 逻辑与 |
~ 和 !~ | 匹配正则表达式和不匹配正则表达式 |
< <= > >= != == | 关系运算符 |
空格 | 连接 |
+ - | 加,减 |
* / % | 乘,除与求余 |
+ - ! | 一元加,减和逻辑非 |
^ *** | 求幂 |
++ – | 增加或减少,作为前缀或后缀 |
$ | 字段引用 |
in | 数组成员 |