Для вашего обновленного ввода, основанного строго на 4-х -строковых записях, вы можете использовать арифметику по модулю для поддержки массивов текущих записей и проверять 3-е строки на соответствие каждой 4-й строке:
$ awk '
{a[FNR%4] = $0; getline b[FNR%4] < "fileB"}
!(FNR%4) && b[3] != a[3] {
for(i=0;i<4;i++) print b[i%4]
}
' fileA
record2 line1=header
record2 line2
record2 line3 id GHI <= this is different
record2 line4
(обратите внимание, что на самом деле следует проверить возвращаемое значение команды getline
и сделать что-то разумное, если она не удалась ).
Для исходного -опубликованного ввода вы могли использовать режим абзаца:
$ awk -vRS= -F'\n' '{A3 = $3}; getline "fileB" > -1 && $3 != A3' fileA
record2 line1=header
record2 line2
record2 line3 id DEF <= this is different
record2 line4
Пустой RS
приводит к чтению целых пустых -записей, разделенных строками, как для нормальной обработки (, вводимых из fileA
), так и для getline
(, вводимых из fileB
). Установка разделителя полей на новую строку(\n
)позволяет нам сохранить всю строку $3
из одного и сравнить с другим. Если они не равны, по умолчанию выводится $0
(, который представляет собой всю запись из getline
из fileB
).
Вы можете использовать
wmctrl
:https://en.wikipedia.org/wiki/Wmctrlили man kdocker
, что позволяет свернуть все приложения в системный трей