-
Txt 파일내에 있는 해당 데이터(단어)를 추출하여 Data Count 수행Perl 2015. 3. 25. 13:05
#!/usr/bin/perl
use strict;
use warnings;
print "===============================\n";
print " Perl_TEST(File Input & Count Data)\n";
print "===============================\n\n";
# ~.txt 파일을 open 해서 한 객체에 넣는다.
open (INFO, 'test1.txt' );
# 객체의 내용에 대하여 배열에 넣는다.
my @lines = <INFO>;
# 배열에 공백을 제거한다.
@lines = trim(@lines);
# Uniq 하게 추출된 단어들단 uniqq 배열에 넣는다.
my @uniqq = uniqElements(@lines);
# 객체를 닫는다, 이후부터는 배열만 가지고 이어간다.
close(INFO);
# 전체 단어 출력
#print @lines;
my $scount = 0;
my $dcount = 0;
# 총 단어의 수 출력
#print "\n 총 단어의 수 :: ", @lines.length, "\n\n";
print " [중복횟수(퍼센트)] :: [데이터]\n\n";
# 반복문을 통해, 0부터 배열 내용의 길이만큼(단어의 수만큼) 반복한다. 예) 단어의 수가 10개면 10번 반복
for( my $i=0; $i < @uniqq.length;$i++) {
# 몇번 반복되었는지 판단하기 위한 변수 설정(count)
my $count = 0;
# 현재 반복된 순번
# print $i, "\n";
# 현재 반복된 순번의 단어
# print $uniqq[$i]
# for 문안에 for 문을 돌려 $i 번째 단어가 반복된 수를 구한다.
for( my $j=0; $j < @lines.length;$j++) {
# 유니크한 배열의 단어들과 전체 단어들과 비교해서 동일한 단어의 횟수(count)를 파악한다.
if($uniqq[$i] eq $lines[$j]){
$count++;
}
}
if($count == 1){
$scount++;
}else{
$dcount++;
}
# 해당 단어가 몇번 반복되었는지 판단한다.
print " ", $count, "회","(",100*$count/@lines.length,"%) :: ", $uniqq[$i], "\n";
}
print "-----------------------------------\n\n";
print " * 중복을 포함한 총 데이터(단어)의 수 :: ", @lines.length, "\n";
print " * 중복을 제거한 총 데이터(단어)의 수 :: ", @uniqq.length, "\n\n";
print " * 중복이 아닌 데이터 개수 :: ", $scount, "\n";
print " * 중복인 데이터 개수 :: ",$dcount, "\n\n";
print "-----------------------------------\n";
# 공백을 지우는 Sub 펑션
sub trim {
my @result = @_;
foreach (@result) {
s/^\s+//; # 앞쪽 공백 지우기
s/\s+$//; # 뒤쪽 공백 지우기
}
return wantarray ? @result : $result[0];
}
# 단어들 중에 Uniq 한 단어들로만 추출한다.
sub uniqElements {
my ($item, %seen, @result);
foreach $item (@_) {
push(@result, $item) unless $seen{$item}++;
}
return @result;
}
'Perl' 카테고리의 다른 글
split 사용법 (0) 2014.12.23 Perl 주석 (0) 2014.12.03 Perl Data Types (0) 2014.11.18 [Perl] 변수 모음 (0) 2014.11.18