Удалить строки из файла с двумя столбцами, если в одном из столбцов обнаружено вхождение - PullRequest
0 голосов
/ 07 мая 2018

Допустим, у меня есть файл с двумя столбцами с таким содержанием:

1 4
1 11
4 5
5 11

Я хочу удалить все строки, если число (из 1-го или 2-го столбца) найдено в следующих строках, независимо от того, находится ли оно в первом или 2-м столбце.

Так что у меня должно получиться что-то вроде этого:

1 4
5 11
  • Вторая строка в исходном файле, т. Е. (1 11), удалена, потому что «1» уже был в первой строке.
  • Третья строка (4 5) удалена, потому что '4' уже было в первой линия.
  • Но четвертая строка (5 11) не удаляется, потому что третья строка (4 5) был удален как раз перед тем.

Я уже пытался использовать awk или sort, но не смог получить ожидаемый результат. Есть что-нибудь для этого?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Это может сработать для вас (GNU sed):

sed -r ':a;N;/^(\S+) (\S+)\n((\1|\2) \S+)|(\S+ (\1|\2))$/s/\n.*//;ta;P;D' file

Добавить следующую строку к текущей строке. Если в добавленной строке есть какое-либо из значений текущей строки, удалите ее и добавьте следующую строку. В противном случае напечатайте, затем удалите текущую строку и повторите.

0 голосов
/ 07 мая 2018

После awk может помочь вам в том же.

awk '{for(i=1;i<=NF;i++){if($i in a){next};a[$i]}} 1'   Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...