로그 데이터에서 필요한 부분만 추출하려고 하였다.
필요한 부분은 [f1]이라는 부분의 바로위 라인 이다.
처음에는 노트패드++에서 모든 파일을 열고 하나씩 복사 하려고 했는데, 데이터가 어마어마하게 많아서
grep 으로 처리 했다.
윈도우10에서 명령어 창을 열고 bash 라고 커맨드를 입력하면 linux 커맨드를 사용할 수가 있게 된다.
실제 데이터 샘플
...
2019-06-25 오후 1:14:53 [INTERFACE] [310166] [2201] [211.252.80.44:5614] Receive Reqeust ==================================================
2019-06-25 오후 1:14:53 [INTERFACE] [310166] [2201] [211.252.80.44:5614] [02 20 19 06 25 13 14 51 0A 84 02 33 31 30 31 36 36 32 32 30 31 66 31 00 B7 00 05 00 00 00 FF FF FF FF FE 00 00 28 DC 31 30 31 30 30 31 30 31 30 37 33 38 37 30 35 32 00 00 02 A2 01 16 27 00 00 00 00 00 02 20 19 06 25 11 57 53 13 23 45 00 00 07 04 BF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE 7A 03 ]
2019-06-25 오후 1:14:53 [INTERFACE] [310166] [2201] Thread reqINS [f1]
...
조건
1. [f1]를 찾아서 한줄 위에 있는 부분을 가져온다.
2. 그 중 Send가 들어간 부분을 제외한다.
3. 시간 순서대로 sorting 해야 한다.
최종 명령어
grep -h -r -B1 '\[f1\]' ./ | grep -vE '\[f1\]' | grep -v '\-\-' | grep -v 'Send' | sed 's/\ \([0-9]\)\:/\ 0\1\:/g' | sort -k2 -k3.1,3.2 -k3.4,3.5 -k3.7,3.8 > sort_match.txt
--------설명--------
:: << 구분
-h :: 파일이름 없이 출력
-r :: 하위 디렉토리
-B1 :: 검색된 위치 바로 위
'\[f1\]' :: 실제 검색 할 키워드, original keyword : [f1]
./ :: 검색 위치
grep -vE '\[f1\]' :: 바로 위 라인만 필요하고 실제 검색 된 위치는 필요없으므로 제외 시킴
grep -v :: '\-\-' 검색 라인마다 추가되는 데, 옵션이 따로 있을 것 같지만 급해서 제외 시킴
grep -v 'Send' :: Send 는 제외
sed 's/\ \([0-9]\)\:/\ 0\1\:/g' :: sort 를 해야 하는 데, 데이터의 시간 일자가 '2019-06-25 오후 2:58:06' 이런식으로 시간이 02가 아닌 2이라서 sort가 안됨. 그래서 ' 2:'를 ' 02:'로 변경시킴
sort -k2 -k3.1,3.2 -k3.4,3.5 -k3.7,3.8 :: '2019-06-25 오후 2:58:06' 의 형태를 sort 시킨다. 일자는 모두 같은 날이여서 포함 시키지 않았다.
k2 는 오전, 오후를 부분,
k3.1,k3.2 는 시(02),
k3.4,3.5는 분(58),
k3.7,3.8는 초(06)를 기준으로 sort 한다.