免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7368 | 回复: 23

求awk脚本合并文件 [复制链接]

论坛徽章:
0
发表于 2011-03-14 12:57 |显示全部楼层
我有6个文件:
1.unl
4301|280518.56|
4302|495374.42000000004|
4303|133506.70000000001|
4304|237070.84000000003|
4305|3096857.0|
4306|2764.3000000000002|
4307|1040399.3800000004|
4308|8803.3200000000033|
4309|39196.599999999999|
4310|1266023.6899999999|
4311|566650.09999999998|
4312|672057.73999999999|
4325|520.0|
4331|721229.40000000002|
4393|-3072.1699999999992|

2.unl
4301|325050.0|116171.0|
4302|249340.0|5990.0|
4303|197819.17|19576.0|
4304|203240.0|310695.0|
4305|469172.0|70796.0|
4306|57344.0|2200.0|
4307|48000.0|31650.0|
4308|106400.0|91518.0|
4309|430800.0|26358.0|
4310|2764000.0|380201.0|
4311|136460.0|81100.0|
4312|603000.0|351562.0|
4325|35060.0|18083.0|
4331|473762.0|114400.0|
4393|58800.0|16228.0|

3.unl
4301|40645.559999999983|
4302|478354.42000000004|
4303|30045.100000000002|
4304|11669.700000000001|
4305|143136.0|
4306|-8735.7000000000007|
4307|845500.1800000004|
4308|6663.3200000000024|
4309|4366.5999999999995|
4310|445132.68999999989|
4311|196969.10000000001|
4312|88274.089999999982|
4331|-4640.6000000000004|
4393|-9151.0499999999993|

4.unl
4301|150000.0|0.0|
4302|175000.0|0.0|
4307|28000.0|0.0|
4308|3000.0|0.0|
4310|2000000.0|0.0|
4311|3000.0|0.0|
4312|2000.0|0.0|

5.unl
4305|2460205.0|
4312|458944.0|
4331|624720.0|

6.unl
4304|0.0|299500.0|
4305|155100.0|27600.0|
4310|721800.0|376701.0|
4311|117900.0|62100.0|
4312|415000.0|324000.0|
4331|246900.0|109100.0|

我想得到这样的结果:
4301|280518.56|325050|116171|40645.56|150000|0|0|0|0|
4302|495374.42|249340|5990|478354.42|175000|0|0|0|0|
4303|133506.7|197819.17|19576|30045.1|0|0|0|0|0|
4304|237070.84|203240|310695|11669.7|0|0|0|0|299500|
4305|3096857|469172|70796|143136|0|0|2460205|155100|27600|
4306|2764.3|57344|2200|-8735.7|0|0|0|0|0|
4307|1040399.38|48000|31650|845500.18|28000|0|0|0|0|
4308|8803.32|106400|91518|6663.32|3000|0|0|0|0|
4309|39196.6|430800|26358|4366.6|0|0|0|0|0|
4310|1266023.69|2764000|380201|445132.69|2000000|0|0|721800|376701|
4311|566650.1|136460|81100|196969.1|3000|0|0|117900|62100|
4312|672057.74|603000|351562|88274.09|2000|0|458944|415000|324000|
4325|520|35060|18083|0|0|0|0|0|0|
4331|721229.4|473762|114400|-4640.6|0|0|624720|246900|109100|
4393|-3072.17|58800|16228|-9151.05|0|0|0|0|0|

论坛徽章:
0
发表于 2011-03-14 15:00 |显示全部楼层
就是将6个文件合并,但是不硬性要求保留2为小数点

论坛徽章:
0
发表于 2011-03-14 19:09 |显示全部楼层
头晕的~~

论坛徽章:
0
发表于 2011-03-14 19:35 |显示全部楼层
本帖最后由 mercuyr 于 2011-03-14 19:39 编辑

你上次发过了吧?  有的两位,有的一位, 需求不明!

论坛徽章:
0
发表于 2011-03-14 20:34 |显示全部楼层
  1. awk -F"|" 'NF{a[$1]=a[$1]"|"$2"|"$3} END {for (i in a) {print i,a[i] |"sort -k 1"} }' 6 | tr -s "[|]"
复制代码
看看好象同LZ的要求不太合,

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-03-14 21:21 |显示全部楼层
为什么有的保留一位,有的保留两位?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2011-03-15 04:04 |显示全部楼层
本帖最后由 yinyuemi 于 2011-03-15 04:05 编辑
  1.   awk '{print gensub(".unl","",1,FILENAME)"|"$0|"sort -t \"|\" -k2n -k1"}' [1-6].unl |awk -F'|' '{for(i=3;i<NF;i++) {x=sprintf("%0.2f",$i);a[$2"|"$1]=(length(a[$2"|"$1])==0)?"|"x:a[$2"|"$1]"|"x}}{p=($2!=v)?++p:p;b[p]=$2;v=$2}END{for(i=1;i<=p;i++){printf b[i];for(j=1;j<=6;j++){if(j==2 || j==6 ||j==4){printf a[b[i]"|"j]?a[b[i]"|"j]:"|0|0"} else {printf  a[b[i]"|"j]?a[b[i]"|"j]:"|0"}}print"|"}}'
  2. 4301|280518.56|325050.00|116171.00|40645.56|150000.00|0.00|0|0|0|
  3. 4302|495374.42|249340.00|5990.00|478354.42|175000.00|0.00|0|0|0|
  4. 4303|133506.70|197819.17|19576.00|30045.10|0|0|0|0|0|
  5. 4304|237070.84|203240.00|310695.00|11669.70|0|0|0|0.00|299500.00|
  6. 4305|3096857.00|469172.00|70796.00|143136.00|0|0|2460205.00|155100.00|27600.00|
  7. 4306|2764.30|57344.00|2200.00|-8735.70|0|0|0|0|0|
  8. 4307|1040399.38|48000.00|31650.00|845500.18|28000.00|0.00|0|0|0|
  9. 4308|8803.32|106400.00|91518.00|6663.32|3000.00|0.00|0|0|0|
  10. 4309|39196.60|430800.00|26358.00|4366.60|0|0|0|0|0|
  11. 4310|1266023.69|2764000.00|380201.00|445132.69|2000000.00|0.00|0|721800.00|376701.00|
  12. 4311|566650.10|136460.00|81100.00|196969.10|3000.00|0.00|0|117900.00|62100.00|
  13. 4312|672057.74|603000.00|351562.00|88274.09|2000.00|0.00|458944.00|415000.00|324000.00|
  14. 4325|520.00|35060.00|18083.00|0|0|0|0|0|0|
  15. 4331|721229.40|473762.00|114400.00|-4640.60|0|0|624720.00|246900.00|109100.00|
  16. 4393|-3072.17|58800.00|16228.00|-9151.05|0|0|0|0|0|
复制代码

论坛徽章:
0
发表于 2011-03-15 09:26 |显示全部楼层
回复 7# yinyuemi


    这个好像在AIX下运行不了

论坛徽章:
0
发表于 2011-03-15 09:27 |显示全部楼层
回复 6# cjaizss


    小数点无所谓,只要合并了就行,完全按照原来的值可以的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-03-15 09:51 |显示全部楼层
回复  cjaizss


    小数点无所谓,只要合并了就行,完全按照原来的值可以的
ztj111 发表于 2011-03-15 09:27

  1.     awk 'BEGIN{FS="|"}NF>1{X=$0;sub(/[^|]+\|/,"",X);a[$1]=a[$1]""X}END{for(i in a)printf("%s|%s\n",i,a[i]);}' *.unl
复制代码
可以吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP