AWK: извлекать строки со значениями, которые совпадают или меньше значений в другом файле?

Я сам нашел решение. Я описываю это здесь, если это кому-то еще нужно.

Проблемный файл был /home/<username>/.config/menus/mate-applications.menu. В моем случае было ясно, какая часть файла была повреждена и как последняя должна быть восстановлена ​​(, если это не так, путь вперед будет заключаться в использовании самой новой из резервных копий с именем mate-applications.menu.undo-10, расположенных в том же каталог ).

2
30.04.2020, 16:41
1 ответ
awk '
  NR==FNR{ if (FNR>1)a[$1]=$3; next } # file2: save ID,Energy value in array `a`
  $1 in a{                            # file1: if ID is present in array
     if (a[$1] != $3){                # if it is not the same Energy value...
       prev=$0                        # save previous line
     }
     else {                           # it is the same Energy value...
       print (prev=="") ? $0 : prev   # print previous line if saved or current line
       prev=""                        # reset previous line
     }
  }
' file2 file1 > file3

Выход:

43 4.38665978376386365240533e-05 3.215e-02
48 4.77674337753321466689890e-05 1.750e-01
52 4.99184267458611271553633e-05 3.110e-01
203 2.17111189970080955017814e-04 1.685e-01
206 2.17705422992319207490738e-04 3.197e-01
245 2.54300542217183317417195e-04 0.000e+00
0
28.04.2021, 23:17

Теги

Похожие вопросы