免费注册 查看新帖 |

Chinaunix

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

一个比较恶心的拆分数据问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-07-01 12:46 |只看该作者
既然是EXCEL 就用EXCEL 的功能实现
1 排序, 用题号排序
2 数据筛选->自动筛选
3 筛选出答案='Y ' 的,选中每行,复制到另一个SHEET.
4 筛选出答案=' ' 的,选中,复制到刚才的数据后面几列.

完成.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
32 [报告]
发表于 2008-07-01 12:48 |只看该作者

回复 #31 digitalchina 的帖子

Great Job.

论坛徽章:
0
33 [报告]
发表于 2008-07-01 13:05 |只看该作者

回复 #30 blackold 的帖子

刚才粘贴出来显示的有问题,不知道为什么
现在改好了

测试结果:
[root@localhost shell]# cat file1.txt
1151       aaa        Y
1151       bbb
1152       ccc        Y
1152       ddd
1153       eee        Y
1153       fff
1154       aaa        Y
1154       bbb
1155       aaa        Y
1155       bbb
[root@localhost shell]# awk 'BEGIN{print "1\t 2\t 3"}{a[$1]=1;{if($3==Y)b[$1,$3]=$2;else c[$1]=$2}}END{for(j in a){print j,c[j]"|"b[j,Y],c[j]}}' file1.txt
1        2       3
1151 aaa|bbb aaa
1152 ccc|ddd ccc
1153 eee|fff eee
1154 aaa|bbb aaa
1155 aaa|bbb aaa

[ 本帖最后由 smz0102 于 2008-7-1 13:07 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
34 [报告]
发表于 2008-07-01 13:14 |只看该作者

回复 #33 smz0102 的帖子

这个适合于只有两个选项的问题,三个选项就不行了。

论坛徽章:
0
35 [报告]
发表于 2008-07-01 13:53 |只看该作者
原帖由 blackold 于 2008-7-1 13:14 发表
这个适合于只有两个选项的问题,三个选项就不行了。




黑哥能具体说说吗?
还有这个问题
if($3==Y)b[$1,$3]=$2;else c[$1]=$2}
这句我是想吧$3==Y时的 $2放到二维数组b数组,不匹配的放到c里,但是从结果看反了,不知道为什么?
帮看看啊!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
36 [报告]
发表于 2008-07-01 14:02 |只看该作者

回复 #35 smz0102 的帖子

是不是少了双引号呢?

论坛徽章:
0
37 [报告]
发表于 2008-07-01 14:43 |只看该作者
原帖由 blackold 于 2008-7-1 14:02 发表
是不是少了双引号呢?

看起来不是,如果改成
[root@localhost shell]# awk 'BEGIN{print "1\t 2\t 3"}{a[$1]=1;{if($3=="Y")b[$1,$3]=$2;else c[$1]=$2}}END{for(j in a){print j,c[j]"|"b[j,Y],c[j]}}' file1.txt
1        2       3
1151 bbb| bbb
1152 ddd| ddd
1153 fff| fff
1154 bbb| bbb
1155 bbb| bbb
[root@localhost shell]# cat file1.txt
1151       aaa        Y
1151       bbb
1152       ccc        Y
1152       ddd
1153       eee        Y
1153       fff
1154       aaa        Y
1154       bbb
1155       aaa        Y
1155       bbb

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
38 [报告]
发表于 2008-07-01 15:00 |只看该作者

回复 #37 smz0102 的帖子

帮你看了一下,确实是双引号的问题:

  1. awk 'BEGIN{print "1\t 2\t 3"}{a[$1]=1;{if($3=="Y")b[$1,$3]=$2;else c[$1]=$2}}END{for(j in a){print j,c[j]"|"c[j],b[j,"Y"]}}' file1.txt
复制代码


还有问题:没有输出“Y”行的选项。

  1. awk 'BEGIN{print "1\t 2\t 3"}{a[$1]=1;{if($3=="Y")b[$1,$3]=$2;else c[$1]=$2}}END{for(j in a){print j,c[j]"|"b[j,"Y"],b[j,"Y"]}}' file1.txt
复制代码

[ 本帖最后由 blackold 于 2008-7-1 15:05 编辑 ]

论坛徽章:
0
39 [报告]
发表于 2008-07-02 09:26 |只看该作者
原帖由 blackold 于 2008-7-1 15:00 发表
帮你看了一下,确实是双引号的问题:

awk 'BEGIN{print "1\t 2\t 3"}{a[$1]=1;{if($3=="Y")b[$1,$3]=$2;else c[$1]=$2}}END{for(j in a){print j,c[j]"|"c[j],b[j,"Y"]}}' file1.txt

还有问题:没有输出 ...



谢谢黑哥!是双引号的问题,想玩问问b[j,Y],如果不加双引号这种形式,代表什么?怎么理解?
还有
awk 'BEGIN{print "1\t 2\t 3"}{a[$1]=1;{if($3==Y)b[$1,$3]=$2;else c[$1]=$2}}END{for(j in a){print j,c[j]"|"b[j,Y],c[j]}}' file1.txt
我用这个也能得到正确的结果,能分析一下吗?

[ 本帖最后由 smz0102 于 2008-7-2 09:27 编辑 ]

论坛徽章:
0
40 [报告]
发表于 2008-07-02 09:48 |只看该作者
先转换成dbf文件然后处理不是很方便吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP