<Perl> 빈칸 있는 열 대체하기.
20090131LKL20000202305, 20090131, LKL2000020, 2305, 100.36, 363, 6.73
20090131LKL20000202310, 20090131, LKL2000020, 2310, 101.61, 389, 7.28
20090131LKL20000202315, 20090131, LKL2000020, 2315, 101.83, 341, 6.59
20090131LKL20000202320, 20090131, LKL2000020, 2320, 101.10, 316, 6.06
20090131LKL20000202325, 20090131, LKL2000020, 2325, 100.85, 342, 6.34
20090131LKL20000202330, 20090131, LKL2000020, 2330, 101.65, 333, 6.28
20090131LKL20000202335, 20090131, LKL2000020, 2335, 99.43, 360, 6.41
20090131LKL20000202340, 20090131, LKL2000020, 2340, 102.22, 338, 6.15
20090131LKL20000202345, 20090131, LKL2000020, 2345, 104.52, 314, 6.06
20090131LKL20000202350, 20090131, LKL2000020, 2350, 102.43, 344, 6.37
20090131LKL20000202355, 20090131, LKL2000020, 2355, 103.50, 310, 5.74
20090131LKL20000300000, 20090131, LKL2000030, 0000, 83.00, ,
20090131LKL20000300005, 20090131, LKL2000030, 0005, 82.00, ,
20090131LKL20000300010, 20090131, LKL2000030, 0010, 84.00, ,
20090131LKL20000300015, 20090131, LKL2000030, 0015, 81.00, ,
20090131LKL20000300020, 20090131, LKL2000030, 0020, 84.00, ,
20090131LKL20000300025, 20090131, LKL2000030, 0025, 86.00, ,
20090131LKL20000300030, 20090131, LKL2000030, 0030, 92.00, ,
20090131LKL20000300035, 20090131, LKL2000030, 0035, 89.00, ,
20090131LKL20000300040, 20090131, LKL2000030, 0040, 85.00, ,
20090131LKL20000300045, 20090131, LKL2000030, 0045, 78.00, ,
20090131LKL20000300050, 20090131, LKL2000030, 0050, 87.00, ,
20090131LKL20000300055, 20090131, LKL2000030, 0055, 91.00, ,
다음과 같은 데이터가 있는 200901.txt 파일이 있습니다. 여기에 6,7번째 열에 보면 값이 없는 구간이 있습니다.
이 빈 구간을 찾아서 Nan이라는 문자로 대체하려고 합니다. Perl로 하려고 하는데...어떻게 하면 될까요? ㅜㅜ
파일이 200901.txt 부터 201312.txt 까지 있습니다. 자동으로 함꺼번에 처리하고 싶습니다.
1) 쉼표와 쉼표 사이, 또는 쉼표와 라인의 끝
1) 쉼표와 쉼표 사이, 또는 쉼표와 라인의 끝 사이에
2) 아무 것도 없거나, 스페이스(들)만 있거나
하는 경우에 그 자리에 " Nan" 을 적어주고 파일을 덮어쓰는 코드입니다.
간단히 테스트를 하긴 했지만, 그래도 모르니 백업을 해두거나 아니면 파일 몇 개만 다른 곳에 복사해서 테스트해본 다음에 쓰세요 :-)
좋은 하루 되세요!
우와 감사합니다.^^
감사합니다. 저렇게 간단할 줄이야..^^
만약에 폴더에 200901.txt, 200902.txt....2012.12.txt 까지 있다면 전체 파일에 대해서 위의 명령을 실행해보고 싶습니다. 한번에 실행하려면..어떻게 하면될까요?
번거로우시겠지만..간단한 주석도 해주시면..너무 감사합니다 :)
위에 적힌 저대로 하시면 현재 폴더의 모든 .txt
위에 적힌 저대로 하시면 현재 폴더의 모든 .txt 파일에 대해 적용됩니다.
perl 인터프리터를 실행할 때 사용한 -p, -i, -e 옵션에 대해서는
http://gypark.pe.kr/wiki/Perl/%EB%94%94%EB%B2%84%EA%B9%85#H_5
나머지는 정규식 치환인데 눈에 보이는 그대로입니다.
좋은 하루 되세요!
감사합니다.^^
자세한 답변 감사합니다. 한가지만 더 질문해도 될까요?
if ($Ln[1] == LKL2000150) { #LKL2000150
$linkid = 1;
}
elsif ($Ln[1] == LKL2000160) {
$linkid = 2;
}
elsif ($Ln[1] == LKL2000120) {
$linkid = 3;
}
elsif ($Ln[1] == LKL2000050) {
$linkid = 4;
}
elsif ($Ln[1] == LKL2000060) {
$linkid = 5;
}
.
.
.
$line= "$Ln[0]$Ln[1]$Ln[2] $Ln[0] $linkid $Ln[2] $Ln[4] $Ln[3] $Ln[5]";
open OutFile, ">>", $outfile or die $! ;
print OutFile "$line\n";
close OutFile;
위와 같은 조건 문을 써서 위의 세번째 링크 아이디 값을 숫자로 변경하려고 합니다.
그런데 각 링크에 맞는 값이 아닌 모든 링크에 1의 값만 들어네요. 에러는 발생안하는데..
왜그런지 모르겠습니다.
if elsif else 구조가 제대로
if elsif else 구조가 제대로 쓰였다면,
무조건 특정 구문( $linkid = 1;이겠죠? )이 실행되었다는 말은
항상 그 if조건이 참이 되었다는 말이죠.
$Ln[1]에 정말 자기가 예상한 필드가 들어있는지 출력은 시켜 보셨나요?
좋은 하루 되세요!
댓글 달기