LINUX.ORG.RU
решено ФорумAdmin

Вывести строки из 1 фаила, которые не содержатся во 2ром фаиле

 


1

0

Привет, есть 2 фаила их разница в дате создания и в размере содержащихся строк.
Хочу отобразить только те строки из фаила 2.txt, которые не содержатся в фаиле 1.txt(старая версия).

Пробовал так

cat 2.txt | grep -v -f 1.txt > 3.txt 
и так 
grep -f 2.txt 1.txt
но пишет: grep: Неверный конец диапазона

Подскажите пожалуйста как можно сделать такое? Отобразить строки фаила 2.txt которые не содержатся в 1.txt

cat 2.txt | wc -l && cat 1.txt | wc -l
150376
11017

grep может лажануть на больших файлах (сожрать много памяти)

Поэтому sort на файлы и man comm

sdio ★★★★★
()
Ответ на: комментарий от vel

Довольно странно сработало, создал 2 маленьких фаила, с ними все получилось. С теми фаилами что мне надо обработать, работает только в 1 сторону из старого фаила оставляет + добавляет из нового строки которых небыло. А наоборот не хочет. Фаил 0 байт получается, уже и сортанул на уникальные строки и dos2unix'ом их обработал, все равно 0

censured
() автор топика
Ответ на: комментарий от censured

man comm

Compare sorted files FILE1 and FILE2 line by line.

Оба файла должны быть отсортированы до сравнения!

типа sort 1.txt >1s.txt && sort 2.txt | comm -3 1s.txt -

vel ★★★★★
()

Ещё опцию ″-F″ надо, иначе grep будет рассматривать строки в файле 1.txt как регулярные выражения.

mky ★★★★★
()
Ответ на: комментарий от berrywizard

Большое спасибо, помогло. Только немного сократил до:

fgrep -x -f proxy-2.txt -v proxy-3.txt > newproxy.txt

proxy-2.txt - старый фаил
proxy-3.txt - последний/новый фаил
newproxy.txt - выхлоп нового фаила, без строчек старого
censured
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.