반응형
매일 파일을 받아 데이터를 갱신하는 경우 어떤 데이터가 갱신되었는지 확인해야 하는 일이 있다.
db로 처리하기에는 너무 오래 걸리기에 sh에서 diff 명령어 파일끼리 비교하기로 했다.
#!/bin/bash
PREV_FILE=$1
LACAL_FILE=$2
diff <(sort $PREV_FILE) <(sort $LACAL_FILE)
이렇게 하면 이전 파일과 현재파일을 sort한 후 행 끼리 비교하게 된다.
모든 행을 비교하면 차이가 나는 경우 다음과 같이 결과가 출력된다.
예시:
$PREV_FILE의 정렬된 내용이 다음과 같고
apple
banana
cherry
그리고 $LOCAL_FILE의 정렬된 내용이 다음과 같은경우.
apple
banana
date
이때 diff <(sort $PREV_FILE) <(sort $LOCAL_FILE) 명령어의 출력은 다음과 같이 출력된다.
3c3
< cherry
---
> date
이는 $PREV_FILE의 3번째 줄 "cherry"가 $LOCAL_FILE의 3번째 줄 "date"로 변경되었음을 의미한다.
주의: 실제 출력 형식은 diff 명령어의 옵션이나 시스템 환경에 따라 약간의 차이가 있을 수 있다. 하지만 기본적인 원리는 위와 같다고 하더라...
무튼 이제 여기서 변경된 내용만 파일로 내려서 db에 밀어넣기위해
#!/bin/bash
PREV_FILE=$1
LACAL_FILE=$2
# grep "^>" 명령어는 입력으로 들어오는 텍스트에서 각 줄의 맨 처음에 > 문자로 시작하는 모든 줄을 찾아 출력하는 명령어
diff <(sort $PREV_FILE) <(sort $LACAL_FILE) | grep "^>" > /data/result.txt
변경된 > 으로 시작하는 데이터를 result.txt 로 뽑아서 db에 밀어 넣도록 작업했다.
이 방법외에는
DB에 이전날 테이블, 당일 테이블 만들어서 이전날 테이블과 당일 테이블을 열마다 전체 비교하는 방법밖에 떠오르지 않는다.(필드가 늘어날수록 겁나 오래걸릴듯)
아무튼 잘 돌아가니 됐다.
반응형
'리눅스' 카테고리의 다른 글
리눅스 DB 백업 및 복원 (2) | 2025.04.09 |
---|---|
세션관리 nohup (0) | 2025.01.23 |