Получите уникальные строки второго файла в результате сравнения двух файлов

У меня есть два текстовых файла, и я хочу считать file1 линию за линией, ища ту же строку в file2 и удаляя его из file2.

У меня есть псевдокод:

for line in file1.txt
do
  sed search line and delete in file2.txt
done
6
задан 4 November 2016 в 11:04

3 ответа

Вы могли выполнить это с grep.

Вот пример:

$ echo localhost > local_hosts

$ grep -v -f local_hosts /etc/hosts
127.0.1.1       ubuntu

# The following lines are desirable for IPv6 capable hosts
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
7
ответ дан 23 November 2019 в 07:25

Я нашел способ сделать это посредством еще некоторых поисков в Интернете. И использование просто grep также, не будучи должен отсортировать файл.

grep -Fvxf file2 file1

Это отобразит новую информацию об экране, который представляет проблему, так как я хотел удалить то, что было в file2 от file1, и имейте новый file1. Так как вышеупомянутый код работал, я просто должен был добавить к нему для получения то, что я хотел.

grep -Fvxf file2 file1 > tempfile && mv tempfile file1

, Который решает мои проблемы. Возможно, не лучший способ, но это действительно работает.

0
ответ дан 23 November 2019 в 07:25

Обычно Вы хотите сохранить строки в file2, которые не находятся в file1 на самом деле.

Существует больше возможностей их,

comm <(sort file1) <(sort file2) -23

через соединение

join -v 1 <(sort file1) <(sort file2)

или через AWK, который не должен сортировать файлы:

awk 'NR==FNR{lines[$0];next} !($0 in lines)' file2 file1
5
ответ дан 23 November 2019 в 07:25

Другие вопросы по тегам:

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