파일에서 각 고유 줄의 발생 횟수를 계산하고 합산합니다.

파일에서 각 고유 줄의 발생 횟수를 계산하고 합산합니다.

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

관련 정보