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