Я хочу загрузить версию vim -, но их тысячи!

Удалить строки, столбцы 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трюк, вывести исходную строку, если она ранее не была видна.
-1
15.07.2021, 13:02
0 ответов

Теги

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