|
发表于 2006-3-2 11:52:37
|
显示全部楼层
小弟先来试一试
假设第一个table的文件名为userinfo,第二个table的文件名为account
- # search.a
- {
- if ($0!~/\w/) next # exclude non-content line
- sum=0
- count=0
- contact=""
- while (getline name < "account") {
- if (match(name,$3" "$2)) {
- split(name,a,"$")
- for (i in a) {
- if (a[i]!~/[a-zA-Z]/) { sum=sum+a[i]; count+=1 }
- }
- break
- }
- }
- close("account")
- if ($5 && $5!~/[a-zA-Z]/) {
- phone=$5
- for (i=6;i<NF;i++) contact=(contact?contact" ":"")$i
- } else {
- phone="N/A"
- for (i=5;i<NF;i++) contact=(contact?contact" ":"")$i
- }
- print $3" "$2"\t"$4"\t"(phone == "N/A"?phone"\t\t":phone"\t")(contact?contact"\t":"N/A\t\t")sprintf("%.2f",sum/count)
- }
复制代码
- bash# awk 'BEGIN { FS="[0-9]+ [a-zA-Z]* [a-zA-Z.]*" } { print $1,$2 }' userinfo | awk -f search.a
复制代码
小弟程序先通过把地址栏作为FS,取出需要使用的部分,放弃地址栏的内容.接着把相关内容在进行处理.小弟的程序有以下弊端:
1.如果地址栏的地址格式不固定,那就会产生错误
2.如果有一个人的名字全是用数字表示(我想不太可能吧)就会有错误输出
3.最后print出来的格式只是适用针对当前这个实际的例子
总结:小弟这个程序通用性不强 ---> 小弟水平不够 |
|