Есть ли в AWK что-то, что позволяет мне ссылаться на предыдущую строку?
Нет, но ничто не мешает вам явно сохранить определенную информацию из последней строкии используя это позже:
{
if (last3 != $3 || last6 != $6 || last7 != $7) {
print
} else
handle duplicate here
}
last3=$3
last6=$6
last7=$7
}
Все переменные lastN
(эффективно) по умолчанию устанавливаются на пустую строку в начале, тогда мы просто сравниваем каждую строку с этой и выводим эту строку, если таковые имеются.
Затем мы сохраняем поля из этой строки, чтобы использовать их для следующей.
То есть, конечно, предполагается, что дубликаты должны обнаруживаться только в том случае, если они являются последовательными. Если вы хотите удалить дубликаты, когда порядок не имеет значения, вы можете вначале sort
в этих полях.
Если порядок должен быть сохранен, вы можете использовать ассоциативный массив для хранения факта, что ключ имеетбыло замечено раньше, что-то вроде:
{
seenkey = $3" "$6" "$7
if (seen[seenkey] == 0) {
print
seen[seenkey] = 1
} else {
handle duplicate here
}
}