저는 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