리눅스

sh 활용 파일 비교

현박이 2025. 6. 2. 20:50
반응형

매일 파일을 받아 데이터를 갱신하는 경우 어떤 데이터가 갱신되었는지 확인해야 하는 일이 있다.

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