이 형식(스립 다이얼 스포츠 dport....)의 큰 텍스트 파일(15줄)이 있습니다. 다른 첫 번째 열을 기준으로 그룹화하고 그룹 수를 가져오고 싶습니다.
입력 파일:
10.10.10.1 10.10.66.150 60761 502 2019-02-28 13:30:31.447 0 6 ....S. 0 1 44 1 cluster1
10.10.10.1 10.10.66.150 60761 502 2019-02-28 13:30:31.447 0 6 ....S. 0 1 44 1 cluster1
10.10.10.3 10.10.66.150 60761 502 2019-02-28 13:30:31.447 0 6 ....S. 0 1 44 1 cluster1
10.10.10.4 10.10.66.150 60761 502 2019-02-28 13:30:31.447 0 6 ....S. 0 1 44 1 cluster1
아래와 같이 출력 파일을 개수별로 정렬하고 싶습니다.
10.10.10.1 2
10.10.10.3 1
10.10.10.4 1
어떻게 해야 하나요?
답변1
이 코드 조각은 의도한 목적을 달성하는 데 사용될 수 있습니다.
use strict
use warnings
my $filename = 'data.txt';
open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";
my %count;
while (my $line = <$fh>) {
my @words = split(' ', $line);
my $ip = $words[0];
$count{$ip}++;
}
while (my ($k,$v)=each %count){
print "$k $v\n"
}
설명하다
- 읽기 위해 파일 열기
my $filename = 'data.txt';
open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";
- 파일 줄을 반복하고 줄을 공백으로 나누어 단어를 찾습니다. 각 행에서 첫 번째 열 값을 추출하여 열을 키로, 값을 키 발생 횟수로 사용하여 해시에 저장합니다.
my %count;
while (my $line = <$fh>) {
my @words = split(' ', $line);
my $ip = $words[0];
$count{$ip}++;
}
해시의 구조는 다음과 같습니다.{ "핵심 가치" } 여기의 해시에는 다음 값이 포함됩니다.
{ '10.10.10.1' => 2, '10.10.10.3' => 1, '10.10.10.4' => 1 }
- 마지막으로 해시의 키, 값 쌍 계산을 반복하고 키(예: 열)와 값(예: 개수)을 인쇄합니다.
foreach my $key (sort { $count{$b} <=> $count{$a} } keys %count) {
print "$key $count{$key}\n"
}
sort { $count{$b} <=> $count{$a} }
해시를 내림차순으로 정렬합니다 .sort { $count{$a} <=> $count{$b} }
해시 값을 오름차순으로 정렬하는 데 사용됩니다.sort { $a <=> $b }
해시 키를 오름차순으로 정렬하는 데 사용됩니다.sort {$b <=> $a}
해시 키를 내림차순으로 정렬하는 데 사용됩니다.
답변2
나는 더 간단한 것을 제안합니다.
cat [*filename*] | cut -f 1 -d \“ \“ | sort -n | uniq -c
에프.