计数并求和文件中每个唯一行的出现次数

计数并求和文件中每个唯一行的出现次数

我认为这个问题的答案可能是该函数的某种变体,uniq它允许您计算每行在文件中出现的次数:

sort file.txt | uniq -c

对我来说,问题是我使用这个uniq函数来生成行计数,并且因为我将输出与其他文件合并,所以我最终在文件中出现了重复的行,需要进一步合理化。

例如,原始uniq行数位于每行的开头:

34 banana

23 apple

48 grapefruit

23 banana

12 apple

所以我需要做到的是:

57 banana

35 apple

48 grapefruit

SUM在其余字段相同的所有情况下,是否有一些函数将作用于第一个字段?

答案1

解决方案awk

$ awk '{i[$2]+=$1} END{for(x in i){print i[x]" "x}}' file.txt
35 apple
48 grapefruit
57 banana

首先awk创建一个索引为名称(香蕉、苹果、葡萄柚)的数组,并对第一列中的值求和。最后打印该数组。

答案2

我会用perl。

#!/usr/bin/perl

use strict; 
use warnings;

my %count_of;

while ( <> ) {
   my ( $word) = m/(\w+)/;
   $count_of{$word}++;
}

foreach my $word ( sort { $count_of{$a} <=> $count_of{$b} } keys %count_of ) {
    print "$count_of{$word} $word\n";
}

运行它perl script.pl file1 file2 file3 file4

或者 - 你可能只想使用 cat.

cat file1 file2 file3 | sort | uniq -c

相关内容