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