두 개의 SQL 출력 파일을 열 이름과 비교하고 차이점을 다른 파일에 인쇄합니다.

두 개의 SQL 출력 파일을 열 이름과 비교하고 차이점을 다른 파일에 인쇄합니다.

저는 Unix 쉘 스크립팅을 처음 접했습니다. 동일한 SQL 쿼리(복제와 같은 유지 관리 작업 전후)의 출력인 2개의 SQL 출력 파일(기본적으로 .txt 형식)을 비교하고 차이점을 다른 텍스트 파일에 인쇄하는 쉘 스크립트를 작성해야 합니다.

출력 파일 1(복제 전):

NAME      OPEN_MODE 
--------- ----------
PROD123   READ WRITE

출력 파일 2(복제 후):

NAME      OPEN_MODE 
--------- ----------
DEV123    READ WRITE

위의 두 출력 파일을 비교하고 차이점을 기반으로 다른 텍스트 파일에 차이점을 인쇄해야 합니다. 예를 들어:

위 출력에서는 "NAME" 열 값이 일치하지 않습니다. 따라서 차이점은 다음과 같이 다른 파일에 인쇄되어야 합니다.

이름이 일치하지 않습니다. OPEN_MODE가 일치합니다. 확인하시기 바랍니다.

그리고 출력 파일에는 이러한 출력이 여러 개 있습니다. 따라서 우리는 또한 이러한 모든 출력을 확인하고 차이점을 다른 파일로 스풀링해야 합니다. 동일한 목적을 달성하는 모든 예제 셸 스크립트가 도움이 될 것입니다.

감사합니다, 아칸소

답변1

awk를 사용하는 솔루션은 다음과 같습니다.

#!/usr/bin/awk -f

NR == 1 {
    # Get the headers on the first line.
    # Will be done for both files, but we don't mind.
    head[1] = $1;
    head[2] = $2;
}

NR == 3 {
    # For the third line, go though the data in both columns...
    for (i = 1; i <= 2; ++i) {
        # If there's something in col[], then this is the second file.
        if (col[i]) {
            # This is the second file.
            # Test the value of the column against what was in the first file.
            if (col[i] == $i) {
                printf("%s is matching. ", head[i]);
            } else {
                printf("%s is not matching. ", head[i]);
                # Flag that we need to print extra info later.
                check = 1;
            }
        } else {
            # This is the first file.
            # Remember the data in the two columns.
            col[1] = $1;
            col[2] = $2;

            # Reset the record (line) counter.
            NR = 0;

            # Skip to the second file.
            nextfile;
        }
    }

    if (check) {
        printf("Please check.");
    }

    printf("\n");
}

테스트해보세요:

$ ./script.awk file1 file2
NAME is not matching. OPEN_MODE is matching. Please check.

답변2

사용차이점

diff file1 file2 > changes.log

관련 정보