我想删除数组col 0中的重复行,使得只保留col 1中的最大值。数据以制表符分隔。共有16列。
def is_visible_for_user(self, user=None):
if not self.limit_usage or not user:
return True
ct = WalletItem.objects.filter(item=self, wallet=user.wallet).count()
return self.limit_usage > ct
期望的输出:
sample1_EGFR_19 53 exon19 ...
sample1_EGFR_19 12 exon20 ...
sample2_EGFR_19 20 exon19 ...
sample3_EGFR_20 65 exon20 ...
sample2_EGFR_19 25 exon12 ...
sample1_EGFR_20 12 exon20 ...
sample3_EGFR_20 125 exon20 ...
我已经开始使用制表符分隔的文本文件,我将其拆分并填充数组。然后我使用哈希并按键排序。最终输出我正确地对数据进行了排序,但是不会删除重复项。如何删除第一列中现在为空的行?感谢
sample1_EGFR_19 53 exon19 ...
sample1_EGFR_20 12 exon20 ...
sample2_EGFR_19 25 exon12 ...
sample3_EGFR_20 125 exon20 ...
请建议一个直接的方法来完成他的。感谢
以下是代码:
sample1_EGFR_19 53 exon19 ...
12 exon20 ...
sample2_EGFR_19 25 exon12 ...
20 exon19 ...
sample3 EGFR_20 125 exon20 ...
65 exon20 ...
sample1 EGFR_20 12 exon20 ...
答案 0 :(得分:1)
这是一个相当简单的UNIX单行程序。为什么需要在Perl中编写它?
awk
按第一列升序和第二列降序和数字对其进行排序,然后使用awk
从每个组中选择第一行。如果awk 'x != $1 { print; x = $1 }'
语句过于混乱,则其功能与tee
相同。 (#!/usr/bin/perl
use strict;
use warnings;
sub sort_func {
# sort by the first col asc and then by the second col desc and numeric
$a->[0] cmp $b->[0] || $b->[1] <=> $a->[1]
}
my %seen;
print
map join("\t", @$_), # re-join the fields with tabs into the original line
grep !$seen{$_->[0]}++, # select the first line of each sorted group
sort sort_func # sort lines using the above sort function
map [split /\t/, $_, 3], # split by tabs so we can sort by the first two fields
<>; # read lines from stdin or the filename given by ARGV[0]
将行写入文件,显示输出到终端。)
如果你真的必须使用Perl,这里是描述问题的简单解决方案:
./sortlines.pl /data/Test/output.txt >/data/Test/output_changed.txt
标记文件可执行文件并按如下方式使用:
UISearchController