вариант 1: каждая строка имеет одинаковое количество слов (полей)
uniq
может пропускать начальные поля, но не конечные поля
rev
переворачивает символы в строке
Так как каждая строка имеет одинаковое количество полей (1 трейлинг), мы можем сделать:
<file rev | uniq -u -f1 | rev
вариант 2: произвольное количество слов в каждой строке
Мы можем написать сценарий awk
, который отслеживает текущую и предыдущие две строки и печатает предыдущую, когда это необходимо:
awk <file '
{
# does current line match previous line?
diff = !( $1==p1 && $2==p2 )
# print stashed line if not duplicate
if (diff && pdiff) print p0
# stash current line data
pdiff=diff; p0=$0; p1=$1; p2=$2
}
END {
# print the final line if appropriate
if (pdiff) print p0
}
'