免费注册 查看新帖 |

Chinaunix

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

unix下对文件的列值排序比较问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-01 09:45 |只看该作者 |倒序浏览
大家好:
    现在有这个一样问题,
原文件内容大致如下:
列1             列2       列3             列4
49373        78        29624        63               
49373        76        29624        63               
49373        63        29624        63               
49373        2          29624        63               
49372        31        29624        31               
49372        17        29624        31               
49371        61        29624        54               
49371        54        29624        54               
49371        29        29624        54  
在使用awk函数解析时:
function test(){
  列1 = values["列1"]
  列2 = values["列2"]
  列3 = values["列3"]
  列4 = values["列4"]
  if(列2==列4){
   列2=0
  }
  #其余列2的值按从小到大从1开始排列
}
我想要的结果形式如下:
列1             列2     列3             列4
49373        3        29624        63               
49373        2        29624        63               
49373        0        29624        63               
49373        1        29624        63               
49372        0        29624        31               
49372        1        29624        31               
49371        2        29624        54               
49371        0        29624        54               
49371        1        29624        54
取值的原理是这样的:
在使用awk函数时:
列1与列3一起确定唯一,               
在同一个列1与列3下,               
如果列2与列4相同,则把列2的值替换成0;
别的列2的值按从小到大从1开始排;         

请问如何实现这个函数?

论坛徽章:
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
2 [报告]
发表于 2010-03-01 09:54 |只看该作者
这个描述也太难理解了。

论坛徽章:
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
3 [报告]
发表于 2010-03-01 10:05 |只看该作者
列1与列3唯一确定列4?

论坛徽章:
0
4 [报告]
发表于 2010-03-01 10:10 |只看该作者
回复 2# blackold


    拿例子来说
当取的 列1=49373 的时候,此时它有4行数据
列2的值为78,76,63,2;
列4的值为63,63,63,63;
也就是列4的值表示的是在列2中的一个主值
此是63即为主值,主值的结果是0
在列2中,其他3个为从值
这3个从值从小到大排序,
78-->3
76-->2
63-->0
2  -->1
===========================
当列1的值为49372等等,同理

论坛徽章:
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
5 [报告]
发表于 2010-03-01 10:15 |只看该作者
回复 4# amoshaochen


    意思我看明白了,不用再说明,我是说你没有描述清楚,让别人很难理解。

论坛徽章:
0
6 [报告]
发表于 2010-03-01 10:24 |只看该作者
回复 5# blackold


    嘿嘿,希望现在能清晰了吧

论坛徽章:
0
7 [报告]
发表于 2010-03-01 11:26 |只看该作者
有兄弟能帮忙解决这个问题吗{:2_170:}

论坛徽章:
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
8 [报告]
发表于 2010-03-01 11:33 |只看该作者
排序就可以了。

论坛徽章:
0
9 [报告]
发表于 2010-03-01 11:39 |只看该作者
回复 8# blackold


    具体如何实现呢?
   if ( (FILENAME ~ / test.csv/) ){
        testFun();
    }
     
    function test(){
       列1 = values["列1"]
       列2 = values["列2"]
       列3 = values["列3"]
       列4 = values["列4"]
       if(列2==列4){
          列2=0
       }
       #其余列2的值按从小到大从1开始排列
   }

这个函数要如何写?

论坛徽章:
0
10 [报告]
发表于 2010-03-01 11:40 |只看该作者
终于看懂题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP