awk

这篇博客介绍了awk编程模型,包括调用方法、记录和域的概念,其中域可以用$符号定义,如$1代表第一个域。awk允许使用-F选项或FS环境变量改变域分隔符。文章还涉及了awk的关系和布尔运算符、表达式、系统变量、格式化输出函数printf以及内置的字符串函数。此外,awk支持流程控制,并且其数组为关联数组,split函数也在讨论范围内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

awk编程模型
awk编程模型

调用方法
与sed类似。

awk 'awk语句' inputfile
awk -f 'awk命令文件' inputfile
./awk命令文件 inputfile

awk语句由 /pattern/action组成

awk '/^$/{print "this is a blank line."}' inputfile

记录和域
行为记录,行中用空格/tab隔开的部分为域。
awk用$符号定义域,$1表示第一个域。

awk '{print $1 $2 $3 $4}' inputfile
awk '{print $0}' inputfile #打印全部域
awk 'BEGIN{one=1;two=2}{print $(one+two)} inputfile #打印第1+2=3个域

awk用-F选项修改域分隔符
或者用FS环境变量修改分隔符

awk -F "\t" '{print $3;}' inputfile
awk 'BEGIN{FS="\t"}{print $3;}' inputfile
awk 'BEGIN{FS="\t+"}{print $3;}' inputfile

awk关系/bool运算符

运算符意义
> >= < <=大于 … …
|| && !逻辑运算
== !=相等/不等
~ !~匹配/不匹配
awk 'BEGIN{FS="\t"} $1~/root/' inputfile
awk 'BEGIN{FS=":"} if($3<$4 && $1>0) print $0;' inputfile

表达式

x=1
y="sss"
z="ddd" "dgb" #z="ddd dgb"
运算符意义
+-*/%加减乘除余
^或**乘方
++x和x++自增
#!/bin/awk -f
BEGIN{FS=","}
{
total=$2+$3+$4+$5
avg=total/5
print $1,avg
}

系统变量

这里写图片描述
这里写图片描述

格式化输出
printf,语法与C语言类似。

这里写图片描述

awk BEGIN{FS=","}{printf("%d %s", $1, $3);} inputfile
awk BEGIN{FS=","}{printf("%10.3f %-12s", $1, $3);} inputfile #长度10位小数点3位/12位字符串左对齐不足补上空格

内置字符串函数

这里写图片描述

流程控制

if(a==b) print $1;
while()
do
while()
for(;;)

数组
awk中为关联数组

b[10.5]=6
for(a in b) print b[a];
if("10.5" in b) print b[10.5];

split函数

split("aa/bb/cc", arr, "/"); #将aa/bb/cc以/为分隔符,分割到数组arr中
split($1, arr, " ");
BEGIN{
    for(x=0;x<ARGC;x++)
    print ARGV[x]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XTreeZhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值