我有一个带有6列的文件(制表符分隔)(为简单起见,我在这里显示了2列)
46_#1 A
47_#1 B
49_#1 C
51_#1 D
51_#1 E
Run Code Online (Sandbox Code Playgroud)
我想计算第一列中的重复项(仅计数 - 不删除)和下一列中的存储计数.所以输出应该是 -
46_#1 1 A
47_#1 1 B
49_#1 1 C
51_#1 2 D
51_#1 2 E
Run Code Online (Sandbox Code Playgroud)
我用linux命令 -
uniq -c file
Run Code Online (Sandbox Code Playgroud)
但是我会使用整条线(不是第1列)
uniq -c -w5 file
Run Code Online (Sandbox Code Playgroud)
但是第一列中的字数可能会有所不同.
有人可以帮忙吗?
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";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |