gawk awk3.c源码分析

107 篇文章 1 订阅
32 篇文章 0 订阅

gawk awk3.c源码分析
本来昨天要完成的,昨天晚上睡得太早,就忘记了,今天打开电脑
,第一件事,就是把这篇完成。
这个文件主要完成一些内部函数的定义。
先定义了一些外部变量,就于对应awk程序中的NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT之类。
inin_vars()
  这个函数主要用于完成对NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT变量的初始化
  并且对dumb[]进行了初始化

get_ofmt()
get_fs()
用于得到OFMT,FS变量的值
set_fs()
get_rs()
set_rs()
之类也是用于变量的值。
接着是一对内部函数
do_exp()
  计算指数的函数,底是自然常数。
do_getline()
  得到一行,这个与inrec()结合没看懂。
do_index()
  像index("abc","bc")中用于字符串查找。返回的索引值从1开始。
do_int()
  取整函数
do_length()
  计算字符串的长度
do_log()
  计算某数以自然常数为底的指数。和do_exp()是一对逆函数。
do_printf()
  没看懂
do_split()
  把字符串拆到数组中。如split("a/b/c",arr,"/")结果
  a[1]="a",a[2]="b",a[3]="c"
  实现拆分的过程非常麻烦。看了若干遍,才看懂
do_sprintf()
  这个函数彻底没看懂。我有些怕它,因为我没有要看懂的勇气。
  象do_split()函数我有勇气看,这个等有机会再看。
do_sqrt()
  计算平方根
do_substr()
  求字串的子串,如substr("12345",2,3)结果为"234"
get_one()
get_two()
get_three()
这三个函数类似,都是解析树中得到相应的元素。都是从lnode中获取值。
inrec()
  这个函数在awk1.c中也有调用。是从文件中读入一行,并拆分到字段变量$0,$1,$2...中去,并设置NF,NR的值。
  具体实现过程很长,选主干说说。
  取到记录分隔符RS和字段分隔符FS
  从文件中读取一行(以RS为准)
  把读到的行内容记入字符串cur中。
  把整行的内容写入变量$0中。
  NF=0
  NR+=1
  对cur中的每个字符进行循环处理
    如果FS=' ',就略过开头的连续空格和tab串
    tcnt=0用于记录找到的字段的长度
    ttmp用于记录找到的字段的内容
    以FS为准确,找到字段内容,记入ttmp中,长度写入tcnt中。
    把字段内容写入++NF中。也即$1,$2等
  对NF进行赋值处理
print_simple()
  对打印函数有些怕,下次不怕时,再看。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值