我有一个包含 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/