Удалите строки с повторяющимися шаблонами в Vim - PullRequest
0 голосов
/ 10 июля 2020

У меня есть текстовый файл, разделенный точками с запятой, представляющий таблицу данных. Я хочу удалить все строки, в которых «столбцы» 2 и 4 идентичны.

Пример для источника:

A;B;C;D;E;F;G
Some;Foo;Text;Foo;;;;
This;line;shall;remain;;;;
;Bar;;Bar;;;;;

должен привести к

A;B;C;D;E;F;G
This;line;shall;remain;;;;

, потому что значения для «столбцов» 2 и 4 («B» и «D») равны в первой строке («Foo») и последней («Bar»), но не в средней («line» и «остаться»).

Каждая «ячейка» может содержать произвольное количество произвольных символов, кроме точки с запятой.

Я уверен, что команда g[lobal] может это сделать, но я не могу чтобы найти правильный образец, соответствующий этим линиям.

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Отметьте это:

awk -F';' '$2 != $4 {print $0}' your_file

результат:

A;B;C;D;E;F;G
This;line;shall;remain;;;;
1 голос
/ 10 июля 2020

Регулярное выражение Vim для «столбцы 2 и 4 идентичны» это

^[^;]*;\([^;]\+\);[^;]*;\1;

Вы должны иметь возможность использовать это с :g.

^           # start of line
[^;]*       # anything but a semi-colon (column 1)
;           # delimiter
\(          # start group 1
  [^;]\+    #   anything but a semi-colon, at least 1 character (column 2)
\)          # end group 1
;           # delimiter
[^;]*       # anything but a semi-colon (column 3)
;           # delimiter
\1          # same as group 1 (column 4)
;           # delimiter (to prevent partial matches)
...