Удаление повторяющихся пар слов в обратном порядке - PullRequest
0 голосов
/ 27 мая 2018

У меня есть файл, подобный этому примеру:

cat dog
mouse cat
dog cat
dog mouse

Я хочу удалить те строки, которые содержат те же слова, но в обратном порядке, в этом случае я хочу "кошка собака", но не"собака кошка".В реальном файле у меня есть множество пар слов (взаимодействий), и я хочу удалить избыточность (я работаю с однонаправленными взаимодействиями).Поэтому я хочу получить в результате:

cat dog
mouse cat
dog mouse

Я пробовал это, но это не дает никакого результата:

cat file | while read f1 f2; do awk -F" " '($1==$f2) && ($2==$f1)' file; done

В этом коде я хочу найти только повторяющиеся пары.Чтобы удалить повторы, я бы сделал что-то вроде этого:

cat file | while read f1 f2; do awk -F" " '($1!=$f2) && ($2!=$f1)' file; done

Ответы [ 2 ]

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

Общее идиоматическое решение:

$ awk '!seen[$1>$2 ? $1 FS $2 : $2 FS $1]++' file
cat dog
mouse cat
dog mouse
0 голосов
/ 27 мая 2018

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

awk '{b[$1,$2]} !($2,$1) in b' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...