gpt4 book ai didi

linux - 使用 perl/linux 计算特定列中的重复项

转载 作者:太空狗 更新时间:2023-10-29 11:39:22 25 4
gpt4 key购买 nike

我有一个包含 6 列的文件(制表符分隔)(为简单起见,这里我显示了 2 列)

46_#1   A   
47_#1 B
49_#1 C
51_#1 D
51_#1 E

我想计算第一列中的重复项(只计算不删除)并在下一列中存储计数。所以输出应该是-

46_#1   1  A    
47_#1 1 B
49_#1 1 C
51_#1 2 D
51_#1 2 E

我用过linux命令-

uniq -c  file

但这将占用整行(不是第一列)然后我使用了

uniq -c -w5 file

但第一列中的字数可能会有所不同。

有人可以帮忙吗?

PS- 我有一个非常大的文件(大约 1gb)。

最佳答案

我不喜欢只提供完整的解决方案,但这似乎是最简单的解释方式。该程序读取文件两次:首先累加频率信息,然后输出修改后的数据。

use strict;
use warnings;

@ARGV or die "No input file specified";

open my $fh, '<', $ARGV[0] or die "Unable to open input file: $!";

my %count;

while (<$fh>) {
next unless my ($key) = split;
$count{$key}++;
}

seek $fh, 0, 0;
while (<$fh>) {
chomp;
next unless my ($key, $rest) = split ' ', $_, 2;
print "$key $count{$key} $rest\n";
}

关于linux - 使用 perl/linux 计算特定列中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com