免费注册 查看新帖 |

Chinaunix

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

【请教】如何删除重复列 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-24 23:00 |只看该作者 |倒序浏览
本帖最后由 keke00 于 2010-09-26 21:54 编辑

请教如何删除重复列?
个人思路:前5行删除橙色标记的列,后5行删除绿色标记列,
               最后在第一列位置插入橙色和绿色标记的列
想用awk来实现,
大家看看我自己写的,免去考虑匹配问题,复杂啦点,求犀利版
  1. awk -F, 'NR<=5{printf $1;for(i=1;i<=NF;i=i+3){printf",";printf $(i+1);printf",";printf $(i+2)}printf"\n"}NR>5{for(i=0;i<=NF;i=i+3){printf",";printf $(i+1);printf",";printf $(i+2)}printf"\n"}' 123.csv
复制代码
或者其它思路?
如下图:

原始数据:
  1. ,H1,,,H2,,,H3,,,H4,
  2. A,8,20%,A,8,30%,A,8,20%,A,8,20%
  3. B,6,30%,B,6,20%,B,6,30%,B,6,30%
  4. C,5,10%,C,5,40%,C,5,10%,C,5,10%
  5. D,3,40%,D,3,10%,D,3,40%,D,3,40%
  6. R1,10,,R2,10,,R3,10,,R4,10,
  7. C1,6,,C2,6,,C3,6,,C4,6,
  8. R2,2,,R3,2,,R4,2,,R5,2,
  9. C2,-2,,,,,C4,-2,,C5,-2,
  10. R3,-6,,,,,R5,-6
  11. C3,-10,,,,,C5,-10
复制代码
整理后数据:
  1. ,H1,,H2,,H3,,H4
  2. A,8,20%,8,30%,8,20%,8,20%
  3. B,6,30%,6,20%,6,30%,6,30%
  4. C,5,10%,5,40%,5,10%,5,10%
  5. D,3,40%,3,10%,3,40%,3,40%
  6. ,R1,10,R2,10,R3,10,R4,10
  7. ,C1,6,C2,6,C3,6,C4,6
  8. ,R2,2,R3,2,R4,2,R5,2
  9. ,C2,-2,,,C4,-2,C5,-2
  10. ,R3,-6,,,R5,-6
  11. ,C3,-10,,,C5,-10
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2010-09-25 08:58 |只看该作者
mark

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-09-25 09:20 |只看该作者
  1. sed 's/^[RC][0-9]/,&/g' lines2|cut -f 1-3,5-6,8-9,11-12 -d","
复制代码
,H1,,H2,,H3,,H4,
A,8,20%,8,30%,8,20%,8,20%
B,6,30%,6,20%,6,30%,6,30%
C,5,10%,5,40%,5,10%,5,10%
D,3,40%,3,10%,3,40%,3,40%
,R1,10,R2,10,R3,10,R4,10
,C1,6,C2,6,C3,6,C4,6
,R2,2,R3,2,R4,2,R5,2
,C2,-2,,,C4,-2,C5,-2
,R3,-6,,,R5,-6
,C3,-10,,,C5,-10

论坛徽章:
0
4 [报告]
发表于 2010-09-25 09:41 |只看该作者
回复 3# 昭襄王


    非常感谢高人~这个思路很好
   问题1:当文件上千列时,手动指定稍有困难,可否用循环实现
   问题2:文件的前5行不变,后面的行可能很多,匹配起来也不容易,能不能以行来定义
          比如NR>5等

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2010-09-25 09:55 |只看该作者
回复  昭襄王


    非常感谢高人~这个思路很好
   问题1:当文件上千列时,手动指定稍有困难,可否用 ...
keke00 发表于 2010-09-25 09:41



高人。。。
我觉得如果前五行固定,与其思索一次性解决,不如把前五行和后面的分开处理,最后追加到同一个文件。
前五行的分割字符如果都是abcd,就全删掉,然后行首插入一列。循环太麻烦了。
分开处理,后面的也就不必考虑匹配了,一律行首补","

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-09-25 10:30 |只看该作者
  1. sed 's/,[ABCD],/,/g' lines2|sed 's/,,/,/g'
复制代码
,H1,,H2,,H3,,H4,
A,8,20%,8,30%,8,20%,8,20%
B,6,30%,6,20%,6,30%,6,30%
C,5,10%,5,40%,5,10%,5,10%
D,3,40%,3,10%,3,40%,3,40%
R1,10,R2,10,R3,10,R4,10,
C1,6,C2,6,C3,6,C4,6
R2,2,R3,2,R4,2,R5,2
C2,-2,,,C4,-2,C5,-2
R3,-6,,,R5,-6
C3,-10,,,C5,-10
剩下的就是加逗号了

论坛徽章:
0
7 [报告]
发表于 2010-09-25 10:57 |只看该作者
回复 6# 昭襄王


    非常感谢~
    这样吗?
  1. sed -e 's/,[ABCD],/,/g' -e 's/,,/,/g' -e 's/^[A-Z][0-9]/,&/g' f.csv
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2010-09-25 10:59 |只看该作者
回复  昭襄王


    非常感谢~
    这样吗?
keke00 发表于 2010-09-25 10:57



    不是说第五行之后匹配困难吗?还是字母加数字啊?

论坛徽章:
0
9 [报告]
发表于 2010-09-25 11:05 |只看该作者
本帖最后由 keke00 于 2010-09-25 11:09 编辑

回复 8# 昭襄王


    抱歉,之前理解的方向有错
    也就是说前5行的【ABCD】不包含数字,反过来就好啦,是我没讲清楚
    谢谢~

论坛徽章:
0
10 [报告]
发表于 2010-09-26 08:16 |只看该作者
回复 9# keke00


    awk -F"," 'BEGIN{OFS=","}{var=$1;for(i=2;i<=NF;i++){if($i != $1){var=var","$i}}print var}' linux.199
,H1,H2,H3,H4
A,8,20%,8,30%,8,20%,8,20%
B,6,30%,6,20%,6,30%,6,30%
C,5,10%,5,40%,5,10%,5,10%
D,3,40%,3,10%,3,40%,3,40%
R1,10,,R2,10,,R3,10,,R4,10,
C1,6,,C2,6,,C3,6,,C4,6
R2,2,,R3,2,,R4,2,,R5,2
C2,-2,,,,,C4,-2,,C5,-2
R3,-6,,,,,R5,-6
C3,-10,,,,,C5,-10


试试我的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP