У меня есть два текстовых файла, и я хочу считать file1 линию за линией, ища ту же строку в file2 и удаляя его из file2.
У меня есть псевдокод:
for line in file1.txt
do
sed search line and delete in file2.txt
done
Вы могли выполнить это с 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
Я нашел способ сделать это посредством еще некоторых поисков в Интернете. И использование просто grep также, не будучи должен отсортировать файл.
grep -Fvxf file2 file1
Это отобразит новую информацию об экране, который представляет проблему, так как я хотел удалить то, что было в file2 от file1, и имейте новый file1. Так как вышеупомянутый код работал, я просто должен был добавить к нему для получения то, что я хотел.
grep -Fvxf file2 file1 > tempfile && mv tempfile file1
, Который решает мои проблемы. Возможно, не лучший способ, но это действительно работает.
Обычно Вы хотите сохранить строки в 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