ファイル内の各固有行の発生回数を計算して合計します。

ファイル内の各固有行の発生回数を計算して合計します。

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

私はパールを使います。

#!/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

関連情報