Удалить строки, столбцы 3, 4, 5 которых совпадают:
awk '!($3==$4&&$4==$5)' data_file
Удалить строки, которые имеют одинаковые 3,4,5 столбца с другой строкой:
awk '!seen[$3,$4,$5]++' data_file
обновление для n столбцов
Удалить строки, в которых столбцы 3, 4,...n совпадают:
awk 'v=0;{for(i=4;i<=NF;i++) {if($i!=$3) {v=1; break;}}} v' data_file
v=0
сбрасывать v на 0 для каждой записи for(i=4;i<=NF;i++) {if($i!=$3) {v=1; break;}}
выполнить цикл от 4-го столбца к последнему, установить v равным 1 и прервать, если это не то же самое, что 3-й столбец v
печатать, если v не равно 0. Удалить строки, которые имеют одинаковые столбцы 3,4,...n с другой строкой:
awk '(l=$0) && ($1=$2=""); !seen[$0]++ {print l}' data_file
(l=$0) && ($1=$2="")
резервная копия исходной строки, пустые 1-й и 2-й столбцы, перестроение $0
. Это выражение всегда оценивается как false, поэтому оно ничего не печатает. Обратите внимание, что &&
имеет приоритет над =
, поэтому вам нужно ()
их; !seen[$0]++ {print l}
обычный seen
трюк, вывести исходную строку, если она ранее не была видна.