#!/usr/bin/perl ###################################################################### # # gate1_log_correction.pl # gate1의 잘못된 명령어 로그의 날짜를 수정한다. # # 로그 예) 1602623392:#:20201014060909-T0690081-192.168.7.113-172.16.7.106-3588.10085354:#:17:#:AAAD:#:T0690081:#:홍길동:#:192.168.7.113:#::#:UNPP:#::#:YNCC:#:njuu01:#:172.16.7.106:#:운영서버:#::#:운영서버:#:ssh:#:501:#:wassvr # 파일명 예) 20200925-172.16.7.235 # ###################################################################### use warnings; use strict; use POSIX qw(strftime); ###################################################################### # # 로그 시간의 오차를 명시한다. (초단위) # ###################################################################### my $fn_date = ""; my $ARGC = @ARGV; if ($ARGC < 2) { printf("Usage: $0 <log file> <output dir> <Correction Value(Second)>\n\n"); printf(" ex) $0 20201030-192.168.21.235 /work/output 10458232\n"); printf(" ex) $0 20201008-192.168.21.235 /test/logs 172858\n"); exit; } my $output_dir = $ARGV[1]; #my $time_rate = 10458232; # SEOUL #my $time_rate = 172858 ; # YEOSU my $time_rate = $ARGV[2]; ###################################################################### # # 로그의 한줄을 읽어서 시간을 수정한 뒤 수정된 값을 반환한다. # ###################################################################### sub conv_date { my $log_str1 = $_[0]; my $epoch1 = 0; my $epoch2 = 0; my $date_str1 = ""; my $date_str2 = ""; my $regex = qr/^([0-9]*):#:([0-9]*)-(.*)/mp; if ( $log_str1 =~ /$regex/g ) { $epoch1 = $1 + 0; $date_str1 = $2; } $epoch2 = $epoch1 + $time_rate; $date_str2 = strftime "%Y%m%d%H%M%S", localtime($epoch2); if (length($fn_date) == 0) { $fn_date = strftime "%Y%m%d", localtime($epoch2); #printf("[DEBUG]***fn_date:%s\n", $fn_date); } $log_str1 =~ s/$epoch1/$epoch2/; $log_str1 =~ s/$date_str1/$date_str2/; #printf("[DEBUG]epoch1:%u\n", $epoch1); #printf("[DEBUG]epoch2:%u\n", $epoch2); #printf("[DEBUG]date_str2:%s\n", $date_str2); return($log_str1); } ###################################################################### # # 출력 파일명을 만든다. # ###################################################################### sub get_out_filename { my $str_line1 = $_[0]; my $str_line2 = $_[1]; my $ret_str = ""; my $regex = qr/^([0-9]*)-(.*)/mp; if ( $str_line1 =~ /$regex/g ) { $ret_str = $str_line2."-".$2; } return($ret_str); } printf("[DEBUG]ARGV[0]:%s\n", $ARGV[0]); my $linestr = ""; ###################################################################### # # 로그에서 한줄만 읽어서 출력 파일명에 사용할 날짜를 얻는다. # ###################################################################### open (IN_FILE, '<', $ARGV[0]) or die "Failed to open. $!"; while (<IN_FILE>) { $linestr = $_; chomp($linestr); # $linestr값이 저장되어 있는데 거기서 끝의 공백을 지워준다. $linestr = &conv_date($linestr); #printf("[DEBUG]%s\n", $linestr); if (length($fn_date) > 0) { last; } } close(IN_FILE) or die "Failed to close. $!"; ###################################################################### # # 출력 디렉토리를 만들고 출력 파일명을 완성한다. # ###################################################################### my $out_file = $output_dir."/".&get_out_filename($ARGV[0], $fn_date); printf("[DEBUG]out_file:%s\n", $out_file); ###################################################################### # # 변환 !! # ###################################################################### open (IN_FILE, '<', $ARGV[0]) or die "Failed to open. $! "; open (OUT_FILE, '>', $out_file) or die "Failed to open. $! "; while (<IN_FILE>) { $linestr = $_; chomp($linestr); # $linestr값이 저장되어 있는데 거기서 끝의 공백을 지워준다. $linestr = &conv_date($linestr); print OUT_FILE "$linestr\n"; } close(IN_FILE) or die "Failed to close. $!"; close(OUT_FILE) or die "Failed to close. $!"; exit;
#!/bin/sh ###################################################################### # # 디렉토리 내 모든 로그에 gate1_log_correction.pl 실행 # - LOG_DIR 값을 수정해서 사용 # ###################################################################### CONVERTER="/gate1_log_correction/gate1_log_correction.pl" function FN_LOG_CONV() { rm -rf ${OUTPUT_DIR} mkdir -p ${OUTPUT_DIR} cd ${LOG_DIR} LOG_FILES=`ls -1 *-*` for log_file in ${LOG_FILES} do echo ${CONVERTER} ${log_file} ${OUTPUT_DIR} ${CORR_VAL} ${CONVERTER} ${log_file} ${OUTPUT_DIR} ${CORR_VAL} done } LOG_DIR="/gate1_log_correction/seoul" OUTPUT_DIR="${LOG_DIR}/output" CORR_VAL=5702400 FN_LOG_CONV LOG_DIR="/gate1_log_correction/yeosu" OUTPUT_DIR="${LOG_DIR}/output" CORR_VAL=172858 FN_LOG_CONV