免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: qcgxlg
打印 上一主题 下一主题

请教高手,看这个shell怎么写? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-06-20 18:57 |只看该作者

回复 #10 cpfly 的帖子

谢谢,我运行的结果是这样的,请帮忙看一下:

  
date              0600          0602               0603                 0604              0605                 0606            0600
20080525 758836152.12 609000.00  2666746080.44 1400500000.00 380000000.00 356894829.48 758836152.12
20080526 609000.00    2666746080.44  1400500000.00 380000000.00  356894829.48

论坛徽章:
0
12 [报告]
发表于 2008-06-20 19:00 |只看该作者

回复 #8 merlin852 的帖子

报错:

交易日期  awk: cmd. line:1: (FILENAME=cd.txt FNR=12) fatal: attempt to use array `b' in a scalar context

论坛徽章:
0
13 [报告]
发表于 2008-06-20 19:08 |只看该作者
漏了b

论坛徽章:
0
14 [报告]
发表于 2008-06-20 19:10 |只看该作者
原帖由 merlin852 于 2008-6-20 19:08 发表
漏了b

正确的应该怎么写?谢谢

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
15 [报告]
发表于 2008-06-20 19:52 |只看该作者
原帖由 qcgxlg 于 2008-6-20 18:31 发表
原始数据是select语句从数据库中得到的,不知道用sql语句是否能够实现这样的输出?


写sql感觉会简单一些。
假设你的数据中的3个列为:
   col1       col2          col3
20080525|0600|758836152.12


select
col1
sum(case when col2 = "0600" then col3 else 0 end)
sum(case when col2 = "0601" then col3 else 0 end)
sum(case when col2 = "0602" then col3 else 0 end)
sum(case when col2 = "0603" then col3 else 0 end)
sum(case when col2 = "0604" then col3 else 0 end)
sum(case when col2 = "0605" then col3 else 0 end)
sum(case when col2 = "0606" then col3 else 0 end)
from table
group by col1

论坛徽章:
0
16 [报告]
发表于 2008-06-20 20:23 |只看该作者

  1. awk -F'|' '{d[$1]=1;n[$1,$2]=$3;h[$2]=1}
  2. END{
  3. printf "交易日期"; for(j in h){printf "%16s",j};print "";
  4. for(i in d){printf i;for(j in h)printf "%16s",n[i,j];print ""}
  5. }' 数据文件
复制代码

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
17 [报告]
发表于 2008-06-20 21:09 |只看该作者
原帖由 ly5066113 于 2008-6-20 19:52 发表


写sql感觉会简单一些。
假设你的数据中的3个列为:
   col1       col2          col3
20080525|0600|758836152.12


select
col1
sum(case when col2 = "0600" then col3 else 0 end)
sum(case w ...


嗯...在SQL里这样写..

论坛徽章:
0
18 [报告]
发表于 2008-06-21 01:24 |只看该作者

回复 #11 qcgxlg 的帖子

哦,这个我说过了,就是数据的问题,你可以看到 0526那个日期的数据,有2个0600的。。

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-04-02 09:32:18
19 [报告]
发表于 2008-06-22 16:35 |只看该作者
嗯,学习了,用二维数组。感谢高手们!

论坛徽章:
0
20 [报告]
发表于 2008-06-22 17:53 |只看该作者
awk 太强了,学些中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP