Как вы и просили в своем комментарии, здесь есть немного другая программа для удаления также связанных тегов абзаца.
Для того чтобы удалить
и
до и после строк, которые вы хотите удалить (дубликаты), я обнаружил, что концептуально легче выполнить файл дважды.
При первом прохождении файла я отслеживаю, видел ли я комбинацию размера шрифта и страны так же, как и раньше. Кроме того, я также отслеживаю номера строк (FNR) строк, которые необходимо удалить. Код «знает» первый проход по файлу, когда NR == FNR. NR - это общее количество записей, а FNR - это номер записи в файле. Таким образом, когда они равны, awk анализирует первый файл.
Во втором проходе через тот же входной файл я распечатываю текущую запись, если она не помечена как подавленная. FNR используется для индексации подавленного массива, потому что FNR на первом проходе совпадает со вторым проходом файла.
Наконец, чтобы сообщить awk о синтаксическом анализе файла дважды, нам нужно передайте входной файл в awk дважды в командной строке.
Вот пересмотренный код. Я также иллюстрирую, как проанализировать ваш входной файл дважды, добавив файл (назовем его input.html
) два раза в командную строку:
awk -F"[\"<>= ]*" '
NR == FNR {
if ( $2 == "font" )
{
if (seen[ $4,$5 ] )
suppress[ NR - 1 ] = suppress[ NR ] = suppress[ NR + 1 ] = 1
seen[$4,$5] = 1
}
next
}
! suppress[ FNR ]
' input.html input.html