> дано два файла с ОГРН (число 13 символов), в одном 4.5m, в другом 800k строчек. Надо сделать третий файл с содержимым f1 которого нет в f2.Так как вы не написали, в каком файле сколько строк, сделал для верности:
% seq 1000000000000 1000005000000|shuf>f1
% seq 1000003000000 1000009000000|shuf>f2
head -3 f1 f2 && wc -l f1 f2
==> f1 <==
1000001476233
1000004330833
1000001025162==> f2 <==
1000006027753
1000007334577
1000007732550
5000001 f1
6000001 f2
11000002 total
Т.е. 5м и 6м. Cойдет?
> grep -v -x -f f2 f1 >f3
> съел 2.5ГБ рамы и задумался уже на много минут. Сервак с 12 ядрами, 100ГБ ОЗУ. И чё это грепу дало?
Cервака под рукой нема, есть старенький ноут с i5 (первым еще) и "слегка" поменьше рамы.
НО! Есть чит, называется "man grep"!
> -F, --fixed-strings
> Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched
> fgrep is the same as ‘grep -F’.
% time grep -v -x -F -f f1 f2|wc -l
4000000
grep -v -x -F -f f1 f2 16,20s user 0,90s system 99% cpu 17,117 total #1GB ОЗУ
wc -l 0,56s user 0,04s system 3% cpu 17,023 total% time grep -v -x -F -f f2 f1|wc -l
3000000
grep -v -x -F -f f2 f1 18,39s user 1,05s system 99% cpu 19,470 total # 1.2GB ОЗУ
wc -l 0,43s user 0,03s system 2% cpu 19,357 total
# убираем -х, который тут нужен как рыбе зонтик
% time grep -v -c -F -f f2 f1
3000000
grep -v -c -F -f f2 f1 15,42s user 0,57s system 99% cpu 16,015 total # ~700MB озу
% time awk 'NR==FNR {a[$0];next} !($0 in a){print $0}' f2 f1|wc -l
3000000
awk 'NR==FNR {a[$0];next} !($0 in a){print $0}' f2 f1 11,76s user 0,65s system 99% cpu 12,411 total
wc -l 0,40s user 0,05s system 3% cpu 12,334 total #~1ГБ
> Вот из прямо сейчас очередной факап грепа:
А может, проблема в прокладке между спинкой стула и монитором? :)