免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1780 | 回复: 2
打印 上一主题 下一主题

[SCO UNIX] awk包涵值里面不能有变量? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-16 21:34 |只看该作者 |倒序浏览
有一个aa文件,内容如下
001 5566 abc|aa 0.56
002 5567 bca|bb 1.20
003 5568 aab|aa 0.42
004 5569 bbc|cc 8.60
005 5560 bbz|cc 0.28
...
想整理一个aa_file文件,把"|"右边的aa bb cc分类提取出来,分别统计每个分类的行数,并把分类出来的内容第四个字段求和。
编写程序zh.sh如下:
sort -t"|" +1 aa>;tmp_aa0
awk -F"|" '{print $2}' tmp_aa0|cut -c1-2 >;tmp_aa1
uniq tmp_aa1 >;tmp_aa2
for m in `cat tmp_aa2`
do
awk '$3 ~ /\$m/ {print}' tmp_aa0 >;tmp_file
awk '$3 ~ /\$m/ {print $4*100}' tmp_aa0 >;tmp_jine
wc -l tmp_file >;tmp_hush0
tmp_hush=`awk '{print $1}' tmp_hush0`
tmp_sum=0
for i in `cat tmp_jine`
do
tmp_sum=`export $tmp_sum + $i`
done
cat tmp_file >;>;aa_file
echo "行数:$tmp_hush       金额:$tmp_sum" >;>;aa_file
done
rm tmp_*
echo "ok!"

运行zh.sh之后提示:zh.sh:syntax error at line 20: 'end of file' unexpected  可程序跟本没有第20行。之后发现:
awk '$3 ~ /\$m/ {print}' tmp_aa0 >;tmp_file
awk '$3 ~ /\$m/ {print $4*100}' tmp_aa0 >;tmp_jine
这两行用$m这个变量不行,提不出来tmp_file和tmp_jine
不知何故,望高手帮忙解决。

论坛徽章:
0
2 [报告]
发表于 2005-08-17 09:03 |只看该作者

awk包涵值里面不能有变量?

awk -F"|" {print $2}' tmp_aa0|cut -c1-2 >;tmp_aa1
这个差个单引号
awk里用shell的变量要用-v传过去,或用引号处理,具体shell板块有很多。
还有要这么复杂吗,

  1. awk -F"[| ]" '{a[$4]+=$5;b[$4]++}END{for (i in a)print i,b[i],a[i]}' aa|sort -k1
复制代码

结果:

aa 2 0.98
bb 1 1.2
cc 2 8.88

论坛徽章:
0
3 [报告]
发表于 2005-08-17 15:33 |只看该作者

awk包涵值里面不能有变量?

刚接触awk,所以只有用最笨的方法,呵呵,让大家见笑了,发贴的时候忘了“'”个标点了。已经改回来了。
用awk -F"[| ]" '{a[$4]+=$5;b[$4]++}END{for (i in a)print i,b,a}' aa|sort -k1
输出结果是:5 0
你能说说数组在这里面是如何应用的么?

awk '$3 ~ /\$m/ {print}' tmp_aa0 >;tmp_file
awk '$3 ~ /\$m/ {print $4*100}' tmp_aa0 >;tmp_jine
上面这两个如果想用变量的话该怎么样改?望指教。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP