Intereting Posts
Начать установку пакета, когда рабочий закончен ifplugd (lo): сбой выполнения программы, возвращаемое значение равно 1 Подсчет последовательных повторений определенного символа (например,) вырезание разных слов с вывода Как найти имя файла, которое составляет ровно 8 уровней? Включить пароль при монтировании диска с помощью cifs Проблемы с файловой системой с двойной загрузкой с / Etc / Hosts и Profile Перемещено несколько файлов, которые не могут использовать mv now «Нет такого файла или каталога», как ошибка для неправильной архитектуры Есть ли какая-либо документация по загрузке сети Xen? Как изменить цвет фона для одной строки? Сколько различных вариантов этой команды? как иметь диаграмму только на одной странице многостраничного файла .ods? извлекать поля из «хвоста -f» потока syslog Обновления статуса twitter из командной строки (через cURL)

Сравните два выходных файла sql с именами столбцов и распечатайте разницу в другой файл

Я новичок в сценариях Unix Shell. Мне нужно написать сценарий оболочки для сравнения 2-х выводных файлов (в основном в формате .txt), которые являются выходами одного и того же запроса sql (до и после задачи обслуживания, например клонирования), и распечатывают различия в другом текстовом файле.

Выходной файл 1 (перед клоном):

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

Выходной файл 2 (после клонирования):

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

Нам нужно сравнить эти два выходных файла и распечатать разницу в другой текстовый файл, основанный на различиях. Например:

Здесь, в приведенном выше выводе, значение столбца «NAME» не совпадает. Поэтому различие должно быть напечатано в другом файле как:

NAME не соответствует. OPEN_MODE соответствует. Пожалуйста, проверьте.

И выходной файл будет иметь несколько таких выходов. Таким образом, нам также нужно проверить все эти выходы и направить разницу в другой файл. Любой пример сценария оболочки для достижения того же будет полезен.

С уважением, AR

Это решение с использованием 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. 

используя diff

diff file1 file2 > changes.log