时间:2015-01-14 18:22:52 作者:qipeng 来源:系统之家 1. 扫描二维码随时看资讯 2. 请使用手机浏览器访问: https://m.xitongzhijia.net/xtjc/20150114/34882.html 手机查看 评论 反馈
c.awk ’BEGIN{
for(k in ENVIRON)
{
print k“=”ENVIRON[k];
}
}‘ #ENVIRON是awk常量,是数组
d.awk ’BEGIN{
total=0;
for(i=0;i《=100;i++)
{
total+=i;
}
print total;
}‘
e.awk ’BEGIN{
total=0;
i=0;
do
{
total+=i;
i++;
}while(i《=100)
print total;
}‘
5.内置函数
a.算术函数
awk ’BEGIN{OFMT=“%.3f”;fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}‘ #OFMT 设置输出数据格式是保留3位小数
awk ’BEGIN{srand();fr=int(100*rand());print fr;}‘ #获得随机数
b.字符串函数
awk ’BEGIN{info=“this is a test2010test!”;gsub(/[0-9]+/,“!”,info);print info}‘ #在 info中查找满足正则表达式,/[0-9]+/ 用””替换,并且替换后的值,赋值给info 未给info值,默认是$0
awk ’BEGIN{info=“this is a test2010test!”;print index(info,“test”)?“ok”:“no found”;}‘
awk ’BEGIN{info=“this is a test2010test!”;print match(info,/[0-9]+/)?“ok”:“no found”;}‘ #正则匹配
awk ’BEGIN{info=“this is a test2010test!”;print substr(info,4,10);}‘ #从第 4个 字符开始,截取10个长度字符串
awk ’BEGIN{info=“this is a test”;split(info,tA,“ ”);print length(tA);for(k in tA){print k,tA[k];}}‘ #分割info,动态创建数组tA
c.时间函数
awk ’BEGIN{tstamp=mktime(“2001 01 01 12 12 12”);print strftime(“%c”,tstamp);}‘
awk ’BEGIN{tstamp1=mktime(“2001 01 01 12 12 12”);tstamp2=mktime(“2001 02 01 0 0 0”);print tstamp2-tstamp1;}‘ #求2个时间段中间时间差
d.其他函数
awk ’BEGIN{while(“cat /etc/passwd”|getline){print $0;};close(“/etc/passwd”);}‘ #打开外部文件
awk ’BEGIN{while(getline 《 “/etc/passwd”){print $0;};close(“/etc/passwd”);}‘ #逐行读取外部文件
awk ’BEGIN{print “Enter your name:”;getline name;print name;}‘
awk ’BEGIN{b=system(“ls -al”);print b;}‘ #调用外部应用程序
6.输出函数
a.printf
awk ’BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf(“%.2f,%.2u,%.2g,%X,%o\n”,n1,n2,n3,n1,n1);}‘ #类似于C语音
7.awk脚本
#!/bin/awk -f
BEGIN{
for(i=1;i《=9;i++)
{
for(j=1;j《=9;j++)
{
tarr[i,j]=i*j;
print i,“*”,j,“=”,tarr[i,j];
}
}
}
注意
1.在awk中有两个特别的表达式,BEGIN和END,这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后的操作将在扫描完全部的输入之后执行。因此通常BEGIN来显示变量和初始化变量,使用END来输出最终结果。
2.awk中数据类型,是不需要定义,自适应的。 有时候需要通过(+、“”)强制转换。
3.awk数组下标是从1开始,与c数组不一样。
4.awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例 如,array[2,4] = 1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP (\034)作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2\0344。多维数组可以使用if((i,j) in array)这样的语法,但是下标必须放置在圆括号中。多维数组使用 for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。split ( item, subscr, SUBSEP)
5.awk实现的性能是比shell实现的强
上面就是Linux下awk文本处理工具的用法介绍了,因为awk是Linux下功能最强大的数据处理引擎之一,所以其用法要讲解起来可不止文中介绍的这些,本文只是介绍了它的基本用法。
发表评论
共0条
评论就这些咯,让大家也知道你的独特见解
立即评论以上留言仅代表用户个人观点,不代表系统之家立场