我有一个由两列数字组成的文件,这些数字相当长(约2亿行)。
示例:
0 1
1 0
2 3
4 5
4 5
5 4
我想要的输出是一个文件,它计算每行不的次数,将处理的行视为不同。
示例输出:
0 1 2
2 3 1
4 5 3
bash,perl,python中的任何脚本都没问题。我对计数列的出现位置(第一个或最后一个)以及最终输出中两个列条目的顺序也无动于衷。
因为我在每个人身上都是新人,所以我认为在与sort
和uniq
一起攻击某些内容之前,我会问专业人士。除非那是最好的方法,否则我对这种大小的文件进行排序犹豫不决。
答案 0 :(得分:2)
2亿行“可能”仍然足够小,可用于单行。注意,将结果输出到STDOUT。
perl -lane '$c{join " ", sort {$a <=> $b} @F}++; END { print "$_ $c{$_}" for keys %c}' file
对于可扩展的内容,您确实需要展示自己的作品。
答案 1 :(得分:0)
data = """0 1
1 0
2 3
4 5
4 5
5 4
"""
lines = data.splitlines()
data_list_of_sets = map(lambda x:" ".join(sorted(x.split())),lines)
from collections import Counter
print Counter(data_list_of_sets)
答案 2 :(得分:0)
# cat nums
0 1
1 0
2 3
4 5
4 5
5 4
# perl -lnE 'my ($ignore, @nums) = split(/\s+/, $_);
my $norm_str = join " ", sort {$a <=> $b} @nums;
$results->{$norm_str}++;
}{
for my $val (keys %$results) {
say $val, " ", $results->{$val};
}' nums
4 5 3
0 1 2
2 3 1
答案 3 :(得分:0)
使用perl的东西(如果已经安装了Data :: Printer模块)。
perl -MDDP -lanE '$h{join " ",sort{$a<=>$b}@F}++}{p %h'
产生
{
'0 1' 2,
'2 3' 1,
'4 5' 3
}