Как объединить два файла с помощью bash и удалить дубликаты? - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы знать, как объединить два файла в одном столбце и удалить дубликаты.Сначала несколько примеров.

Файл1:

SERVER1; Deployed; Infrastructure
SERVER2; Deployed; Infrastructure
SERVER3; Deployed; Infrastructure
SERVER4; Deployed; Infrastructure
SERVER5; Deployed; Infrastructure

Файл2:

SERVER1;
SERVER2;
SERVER5;

Ожидание:

SERVER3; Deployed; Infrastructure
SERVER4; Deployed; Infrastructure

Пробные команды, такие как: sort File1 File2 | uniq > File3, но он возвращает только объединенный вывод, поскольку он видит каждый столбец как уникальный, вывод выглядит так:

 SERVER1;
 SERVER1; Deployed; Infrastructure
 SERVER2;
 SERVER2; Deployed; Infrastructure
 SERVER3; Deployed; Infrastructure
 SERVER4; Deployed; Infrastructure
 SERVER5;
 SERVER5; Deployed; Infrastructure

Затем попытался удалить дубликаты из того, что я получил выше, с помощью команды awk -F";" '!_[$1]++' File3, ноПохоже, что он удаляет только одну дублирующую строку и оставляет другую:

SERVER1;
SERVER2;
SERVER3; Deployed; Infrastructure
SERVER4; Deployed; Infrastructure
SERVER5;

Я хотел бы проверить дубликаты и удалить как дубликат, так и сам сервер, у вас есть какие-либо предложения?

Ответы [ 3 ]

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

Вы можете использовать grep с опциями инвертирования совпадений файлов (-f) и (-v):

grep -vf File2 File1

Вывод:

SERVER3; Deployed; Infrastructure
SERVER4; Deployed; Infrastructure
0 голосов
/ 10 мая 2018

Команда join работает здесь:

$ join -t ';' -a 1 -v 2 File1 File2
SERVER3; Deployed; Infrastructure
SERVER4; Deployed; Infrastructure

объединение требует сортировки файлов. Если они не отсортированы:

$ join -t ';' -a 1 -v 2 <(sort File1) <(sort File2)
0 голосов
/ 10 мая 2018

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

awk 'FNR==NR{a[$0];next} !($1 in a)' File2  File1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...