awk

awk使用方法

awk '{pattern + action}' {filenames}

其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。awk支持所有的正则表达式元字符。

awk有2个特殊的段,BEGIN,END,分别用于主循环的前后。

调用awk的3种方式

awk '{pattern + action}' {filenames}
awk -f awkfile filenames
file.awk filenames

记录和域

awk的一行文本称作一个记录。awk通过分隔符,把一行文本分成多个域。域从1开始编号,$1,$2分别表示第一,第二个域,$0表示所有域。
$后面可以跟变量或者表达式,例如$(a+b)
awk可以通过-F指定分隔符,或者在BEGIN段内使用FS=char指定分隔符。

关系和布尔表达式

运算符意义
<
>
<=
>=
==
!=
~匹配正则表达式
!~不匹配正则表达式
||
&&
!

表达式

awk可以定义变量,awk变量区分大小写。awk变量无需定义类型,每个变量有2种类型,数值和字符串值,根据上下文决定使用什么类型。默认数值为0,字符串值为空。

x=1  #x=1
z="very" "good"  #z=very good 

awk运算符

运算符意义
+
-
*
/
%
^ 或 **乘方
++x
x++

系统变量

变量意义
$0当前记录(作为单个变量)
$1~$n当前记录的第n个字段,字段间由FS分隔
FS输入字段分隔符 默认是空格
NF当前记录中的字段个数,就是有多少列
NR已经读出的记录数,就是行号,从1开始
RS输入的记录他隔符默 认为换行符
OFS输出字段分隔符 默认也是空格
ORS输出的记录分隔符,默认为换行符
ARGC命令行参数个数
ARGV命令行参数数组
FILENAME当前输入文件的名字
IGNORECASE如果为真,则进行忽略大小写的匹配
ARGIND当前被处理文件的ARGV标志符
CONVFMT数字转换格式 %.6g
ENVIRONUNIX环境变量
ERRNOUNIX系统错误消息
FIELDWIDTHS输入字段宽度的空白分隔字符串
FNR当前记录数
OFMT数字的输出格式 %.6g
RSTART被匹配函数匹配的字符串首
RLENGTH被匹配函数匹配的字符串长度
SUBSEP数组下表分隔符。\034

格式化输出

printf (格式控制符,参数)
控制符意义
修饰符意义
-左对齐
width域宽度
.prec小数位数
--
格式符意义
%c
%d
%u无符号整数
%e浮点数,科学计数法
%f
%s
%x十六进制
%o八进制
%g自动选择合适的表示法
%p指针的值

向脚本传递参数

awk脚本内的变量,可以在命令中传递,使用-v

scr.awk -v paramname=paramvalue   files

条件语句和循环语句

awk条件语句与循环语句与C语言一样。

if (expression)
 {statements}
[
else
{statements}
]

#[]表示可选。if允许嵌套。语句后可以跟;表示结束。

while(expression)
{
statements
}

do
{
statements
} while(expression)

for(var in list)
{
}

for(;;)
{
}

数组

数组格式与C一样,不过不用定义类型与大小。
1、关联数组
关联数组即数组下标可以是表达式,数值,字符串。
字符串与数值是有差异的。array[09]与array[9]不是一个地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值