|
看了一下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] |
|