QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 879|回复: 0

学习awk总结

[复制链接]
发表于 2004-12-1 17:49:03 | 显示全部楼层 |阅读模式
看了一下awk,总一下
记录(record):简而言之就是一行(RS是其分割符,默认RS="\n")
域(field):也就是一行中的一个块(FS是其分割符,默认FS=" ")
内建变量:也就是你直接可以用它们
函数
1、格式化输出
        printf
        sprintf
        同c语言
2、字符串函数
        length(string)  返回字符串长度
        index(string,"xx") 返回xx出现的第一位置
        tolower(string)
        toupper(string)
        substr(string,startpos,maxlen)返回一个字符串,该字串的开始位置是string的startpos处,其长度为maxlen,如startpos+maxlen>length,则截断)
        match(string,/xx/),RSTART,RLENGHT       返回string中,RSTART包含xx出现的第一位置,RLENGHT包含字符跨度
        sub(/regexp/,replstring,string) 替换string中第一次出现/regexp/的字符串为replstring.
        gsub(/regexp/,replstring,string) 替换所有匹配项
        split(string,array,splitsign) 将string以splitsign进行分割,并放入数据array中。
下面一个个测试散的一些代码,为了减少我的工作量,贴了上来。
执行方法(将其只在为了一个文件test.awk):

awk -f test.awk inputfile inputfile2
这样可以看到awk中的一些基本的输出啦

[code:1]
BEGIN { x="1.01" }
/^$/ { x=x+1}

{
print "下面是常常见的一些awk常量:"
print "参数数量:" ARGC
print "当前正在处理的文件在参数数组中的序号:"ARGIND
print "当前正在处理的文件的文件名:" ARGV[ARGIND]
print "当前正在处理的文件的文件名:" FILENAME
print "数据格式转换:"CONVFMT
print "ORACLE_HOME:"ENVIRON["ORACLE_HOME"]
print "FIELDWIDTHS:" FIELDWIDTHS "用于故定栏的宽度的数据排版"
print "当前输入文件中的记录数量:" FNR
print "输入文件的域分割符:" FS
print "输入文件的记分割符:" RS
print "当前记录中域的个数:" NF
print "输入记录的总数(所有输入文件中记录的总和):" NR
print "输出时数据格式:" OFMT
print "输出时域分割符:" OFS
print "输出时记录分割符:" ORS
print "程序运行相关信息:"
print "gid:" PROCINFO["gid"] "\tuid:" PROCINFO["uid"] "\tpid:"PROCINFO["pid"]
print "反斜杠:\\"
print "响铃:\a"
print "向前删除:i\b\b\b"
print "form-feed.\faaaaaa\fbbbbbb"
print "新行\naaaaaa\nbbbbbb"
print "回车aaaa\rbbbb\rccccc"
print "横向制表符\taaaaaaaa\tbbbbbb"
print "纵向制表符\vaaaaaaaa\vbbbbbb"
}

{

print "下面是控制语句"
var1=1
if(var1){
   print "var1 等于1"
   while(var1) {
      print "while"
      for (;var1;) {
         print "for break"
         break;
      }
      print "while break"
      break;
   }
}else {
   print "var1 不等于 1"
   exit
}
}

{
print "下面是常常用到的一些awk函数其它的看上面的说明吧:)"
print "atan2(3,5) 等于:"atan2(3,5)
print "int(exp(expr))用于将指数运算结果转为整数:"int(exp(4)/3)
print "随机rand():"rand()
print "字符串到数字" strtonum("a")
print "当前时间:"strftime()
}

END {
print "i found "x" blank lines:)"
}

[/code:1][/code]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-5-16 03:53 , Processed in 0.063464 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表