2009. 6. 1. 17:53

스크립트 문제

로그 파일의 문제
생성시에 길어진 라인은 짤려서 다음 라인으로 생성이 된다.!!
다음 라인으로 저장된 라인을 다시 바로 위의 라인의 끝으로 붙여넣기 할려는 목적 !!

두개의 라인이 모두 그런 패턴을 보이는 경우가 있음 !!

특정 패턴
다음 라인으로 짤려서 내려간 것은 빈칸 (스페이스) 가 10개 이상으로 연속되어 구분하기 쉽다.

위의 문제를 해결해서 새로운 파일로 저장해야 함!

예시 로그 ( 라인번호와 함께 표시 )
  1 18:16:27.140 CALL(225) (01:14985:00) SENT L4 RTR DIP W/MEDIA PARAM ID:  771 to
  2                        L4
  3 18:16:27.140 CALL(L4)  (01:14985:00) RCVD Route Control from H323
  4 18:16:27.140 CALL(L4)  (01:14985:00) Accessing IP Bearer Profiles
  5 18:16:27.140 CALL(L4)  (01:14985:00) Profile Id 3 (RG 771)
  6 18:16:27.140 CALL(L4)  (01:14985:00) SENT Route Control Ack to H323
  7 18:16:27.140 CALL(225) (01:14985:00) RCVD (2)Route Control Ack from L4
  8 18:16:27.140 CALL(225) (01:14985:00) H245 Tunneling Set in Incoming Setup
  9 18:16:27.140 CALL(225) (01:14985:00) Accepted H245 Tunneling
 10 18:16:27.140 CALL(225) (01:14985:00) Incoming SETUP has fastStart present
 11 18:16:27.140 CALL(225) (01:14985:00) Accepted FastStart Proposal - g729(20)
 12 18:16:27.140 CALL(225) (01:14985:00) Remote Fwd Log Chan Codecs:
 13 18:16:27.140 CALL(225) (01:14985:00) g723.1(30) g729(20) nonStandard g723.1(30)
 14                         g729B(20) g711A64k(20) g711U64k(20)
 15 18:16:27.140 CALL(225) (01:14985:00) Remote Rev Log Chan Codecs:
 16 18:16:27.140 CALL(225) (01:14985:00) g723.1(30) g729(20) nonStandard g723.1(30)
 17                         g729B(20) g711A64k(20) g711U64k(20)
 18 18:16:27.140 CALL(225) (01:14985:00) Local Codecs: g711U(10,30,30) g711A_64(10,
 19                        30,30) g729(10,20,60) g729B(10,20,60) g729AB(10,20,60) g
 20                        729A(10,20,60)
 21 18:16:27.140 CALL(RAS) (01:14985:00) RCVD H225 ARQ from GK




해결책 첫번째

특정패턴 검색해서 그 라인의 라인번호를 알아내고

바로 윗라인과 그 라인을 각각 변수 두개로 저장시킨다.
--> 문제점 : 라인번호가 하나가 있는게 아니므로 파일로 따로 라인번호들만 저장해서
    sed 가 파일로부터 라인번호를 읽어와서 작업을 하도록 해야 ??
예를 들어서
14번에서 패턴이 검출되고 (빈칸이 10개 이상 포함되는 라인들)
13번 라인을 변수 A 로 지정
14번 라인을 변수 B 로 지정


변수 C = $B$A

두 라인을 합친 것을 C 라인

원본에서 $B 를 $C로 치환 ( sed ? )
원본에서 14번 라인을 삭제
--> 문제점 하지만 특정패턴이 두번 반복되면 ?

새로운 파일로 리다이렉트
1 18:16:27.140 CALL(225) (01:14985:00) SENT L4 RTR DIP W/MEDIA PARAM ID:  771 to
2                        L4

#!/bin/bash
logfile=/test/log.txt
outfile=/test/out.txt
#현재 하나의 특정패턴에 대해서만 적용됨, 라인들을 임시파일로 지정하고 그곳으로부터 sed 를
#순차적으로 진행시키는 것??
# grep -n "          *" $logfile | awk -F: '{print $1}'  > imsy.txt
# imsy.txt 가 라인번호만 써진 파일
# 여기서 최종 치환을 수행하도록 imsy.txt 파일을 변경 ?
#

B=`grep -n "          *" $logfile | awk -F: '{print $1}' `
#echo "B =" $B
A=`expr $B - 1 `
#echo "A =" $A

C=`sed -n ''$B'p' $logfile`
#echo "C=" $C
D=`sed -n ''$D'p' $logfile`
echo "D=" $D

E=$C$D
echo "E=" $E
# 여기서 sed 로 치환하면 에러발생
sed ''$A's'$C'/'$E'/g' $logfile > $outfile