求助处理一组数据
时间:2011-03-23
来源:互联网
有这样一个格式文件,空白处为制表符隔开
CACNA 53586 chr12 2492350 2545936
CACNA 637634 chr12 2032989 2670623
CACNA 637634 chr12 2032989 2670623
CACNA 53586 chr12 2492350 2545936
CACNA 53586 chr12 2492355 2545941
CACNA 53586 chr12 2492350 2545936
CACNA 53586 chr12 2492350 2545936
CACNA 53586 chr12 2492350 2545936
CACNA 637634 chr12 2032989 2670623
CACNA 53586 chr12 2492350 2545936
CACNA 637634 chr12 2032989 2670623
CACNA 53586 chr12 2492350 2545936
PEX5 19843 chr16 7234240 7254083
AA1C 54387 chr10 2492560 2915952
第一列没有重复的,输出整行
第一列有多个的,比较第二列的大小,选择最大的那一个输出整行,最大值有多个相等的,输出出现最早的那一行。
(有的行是完全一致的,因为还有其他的列会不一致,没有粘贴全)
理论结果应该是
CACNA 637634 chr12 2032989 2670623
PEX5 19843 chr16 7234240 7254083
AA1C 54387 chr10 2492560 2915952
谢谢
CACNA 53586 chr12 2492350 2545936
CACNA 637634 chr12 2032989 2670623
CACNA 637634 chr12 2032989 2670623
CACNA 53586 chr12 2492350 2545936
CACNA 53586 chr12 2492355 2545941
CACNA 53586 chr12 2492350 2545936
CACNA 53586 chr12 2492350 2545936
CACNA 53586 chr12 2492350 2545936
CACNA 637634 chr12 2032989 2670623
CACNA 53586 chr12 2492350 2545936
CACNA 637634 chr12 2032989 2670623
CACNA 53586 chr12 2492350 2545936
PEX5 19843 chr16 7234240 7254083
AA1C 54387 chr10 2492560 2915952
第一列没有重复的,输出整行
第一列有多个的,比较第二列的大小,选择最大的那一个输出整行,最大值有多个相等的,输出出现最早的那一行。
(有的行是完全一致的,因为还有其他的列会不一致,没有粘贴全)
理论结果应该是
CACNA 637634 chr12 2032989 2670623
PEX5 19843 chr16 7234240 7254083
AA1C 54387 chr10 2492560 2915952
谢谢
作者: feiyue0908 发布时间: 2011-03-23
awk '{if($2>a[$1]){a[$1]=$2;b[$1]=$0}}END{for(i in b){print b[i]}}' file
作者: ziyunfei 发布时间: 2011-03-23
QUOTE:
awk '{if($2>a[$1]){a[$1]=$2;b[$1]=$0}}END{for(i in b){print b}}' file
ziyunfei 发表于 2011-03-23 13:33
ziyunfei 发表于 2011-03-23 13:33
这个已经超出我的理解了,新手,看不懂啊
作者: feiyue0908 发布时间: 2011-03-23
本帖最后由 dgtnk 于 2011-03-23 13:51 编辑
回复 feiyue0908
复制代码
回复 feiyue0908
- #!/usr/bin/perl
- use strict;
- use warnings;
-
- my %hash;
- while (<>){
- my $line = $_;
- my @info = split /\s+/;
- my $name = $info[0];
- my $value = $info[1];
- if ((defined $hash{$name} && $value > $hash{$name}{"value"}) || (not defined $hash{$name})) {
- $hash{$name} = {
- "value" => $value,
- "info" => $line,
- };
- }
- else {
- next;
- }
- }
-
- foreach my $name (sort keys %hash) {
- print $hash{$name}{"info"};
- }
作者: dgtnk 发布时间: 2011-03-23
回复 dgtnk
输出结果是对的,得好好拜读才能看明白,谢谢
输出结果是对的,得好好拜读才能看明白,谢谢
作者: feiyue0908 发布时间: 2011-03-23
QUOTE:
awk '{if($2>a[$1]){a[$1]=$2;b[$1]=$0}}END{for(i in b){print b}}' file
ziyunfei 发表于 2011-03-23 13:33
ziyunfei 发表于 2011-03-23 13:33
偶发现ziyuefei一直用的AWK哎。真是羡慕,偶看过后不用就忘了,伤了AWK的心
作者: seufy88 发布时间: 2011-03-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28