一个比较恶心的拆分数据问题
西门子
一个比较恶心的拆分数据问题
题号 答案 答案
1151 更快、更高、更强 Y
1151 和平、友谊、进步
1152 希腊雅典 Y
1152 法国巴黎
1153 不是 Y
1153 是
1154 五大洲 Y
1154 全人类
1155 中国印 Y
1155 中国结
单位给了一些 exlcel 数据, 如第一行1151 代表题号,后便的是答案选项, y 代表yes
也就是说,每2行 是一个题的 选项和答案。
题号 选项 答案
现在需要 整理成 题号 [color=Red] 选项1|选项2 [/color] 选项1 的形式。 比较恶心吧
谁能帮忙解决一下,将题号相同的行,合并成一行的问题
[[i] 本帖最后由 西门子 于 2008-6-27 17:10 编辑 [/i]]
blackold
回复 #1 西门子 的帖子
西门子搞错了吧,选项都一样?
[quote]现在需要 整理成 1151 [color=Red]更快、更高、更强[/color]|[color=Blue]更快、更高、更强 [/color] 更快、更高、更强 的形式。[/quote]
[[i] 本帖最后由 blackold 于 2008-6-27 16:50 编辑 [/i]]
西门子
没错, 最后一个是答案
即 :题 ----选项-----正确答案
无声无息
1151 更快、更高、更强 |和平、友谊、进步 更快、更高、更强
--------------华丽的分割线--------------------
是这个形式吧?
blackold
回复 #3 西门子 的帖子
那第二行(1151 和平、友谊、进步 )相当于没用了。 sort -u 后再sed
西门子
[quote]原帖由 [i]无声无息[/i] 于 2008-6-27 16:40 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8687606&ptid=1182195][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
1151 更快、更高、更强 |和平、友谊、进步 更快、更高、更强
--------------华丽的分割线--------------------
是这个形式吧? [/quote]
理解完全正确!!!!!
walkerxk
不是‘1151 更快、更高、更强|和平、友谊、进步 更快、更高、更强’?听你的讲解应该是这个啊。
walkerxk
我的思路,删除Y和回车还有后面的一个字段,然后重复第二个字段,谁翻译成awk?感觉awk简单点。
西门子
我的思路是,先把 带y 的一行选出来重定向到一个文件中 然后 再两个文件比较。、
可是 我的语句不对,谁帮我检查一下
awk '{ if ($3=="Y") print $0}' filename
Cocory
这个。。。俺也没看懂楼主意思
---------------------------------------
没想到刷新挺快
[[i] 本帖最后由 Cocory 于 2008-6-27 17:05 编辑 [/i]]
西门子
帮我看看上边那个输出的awk有问题吗! awk '{if ($3== "Y") print $0 }' book.txt
[[i] 本帖最后由 西门子 于 2008-6-27 17:17 编辑 [/i]]
blackold
回复 #11 西门子 的帖子
还是写一点吧:
[code]
$ awk '{if (!res[$1] ) res[$1]=$2; else {if ($3 ~ /Y/) res[$1]=$2"|"res[$1]"/t"$2; else /
res[$1]=res[$1]"|"$2"/t"res[$1]; print $1, res[$1]}}' urfile[/code]
[[i] 本帖最后由 blackold 于 2008-6-27 17:22 编辑 [/i]]
r2007
[code]awk '{if($1 in a)a[$1]=a[$1]"|"$2;else a[$1]=$2;if($3="Y")b[$1]=$2;}END{for(i in a)print i,a[i],b[i]}'[/code]
西门子
感谢r2007 的帮助 ,但是有点小bug
awk '{if($1 in a)a[$1]=a[$1]"|"$2;else a[$1]=$2;if($3="Y")b[$1]=$2;}END{for(i in a)print i,a[i],b[i]}' 对答案的输出 处理不准确
[[i] 本帖最后由 西门子 于 2008-6-30 12:32 编辑 [/i]]
灿烂小猪
awk '{a[$1]=a[$1]"|"$2" "a[$1]}END{for(i in a)print i,a[i]}' urfile
这样可不可以?
[[i] 本帖最后由 灿烂小猪 于 2008-6-27 17:59 编辑 [/i]]
err7dd
try:
[CODE]awk '{a=$1;b=$2;if($3~/Y/)c=$2;getline;d=$2;if($3~/Y/)c=$2;print a,b"|"d,c}'[/CODE]
西门子
awk '{a=$1;b=$2;if($3~/Y/)c=$2;getline;d=$2;if($3~/Y/)c=$2;print a,b"|"d,c}'
这样也是个好办法
kingsu
排名第一的还是13楼楼长的。。。awk数组用法示范
西门子
[quote]原帖由 [i]kingsu[/i] 于 2008-6-30 11:46 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8701601&ptid=1182195][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
排名第一的还是13楼楼长的。。。awk数组用法示范 [/quote]
难道你没有发现他的数组有问题吗????
我验证了他的程序 发现 ;if($3="Y")b[$1]=$2; 部分不能正确的 printe 出答案来,而是
输出了每行最后一个选项,作为正确答案。
我也看不出写的有什么毛病, 但结果就是不对
原始文件:
[color=Red]9880 名正言顺
9880 名副其实 Y
9880 名声大振 [/color]
处理完毕文件:
[color=Red]9880 名正言顺|名副其实|名声大振 名声大振[/color]
9881 一望无际|物美价廉|眼疾手快|五采缤纷 五采缤纷
9840 呢|吗|哇|呀 呀
9882 突然|仍然|不然 不然
9800 因|原|轮|期 期
9841 地方、处所|有价值 有价值
9883 因为..所以|不但..而且|虽然..但是 虽然..但是
9801 磨锋利|磨刀石|厉害|特别 特别
9842 保留-保存|坚固-牢固|承受-接受 承受-接受
9884 维护|爱护|保护 保护
9802 听见|消息|出名|用鼻子闻 用鼻子闻
9843 精美|栩栩如生|精彩 精彩
9885 李白|王维|杜甫|李绅 李绅
9570 认真听讲|都在家里睡觉|练习骑自行车 练习骑自行车
9803 顺着|按照|顺从|随着 随着
9844 飞流直下三千尺|遥看瀑布挂前川 遥看瀑布挂前川
9886 反问|比喻|拟人|夸张 夸张
9571 举办|旺盛|起来|振兴 振兴
其实答案是随即的。。。。。 这里的结果默认最后一个选项是 答案
[[i] 本帖最后由 西门子 于 2008-6-30 13:23 编辑 [/i]]
err7dd
数组有输出顺序的问题,另外数据量很大的话,会占用大量内存,我觉得对于数据量大的问题,减少使用数组