Да чем угодно. На PHP или Python можно скрипт написать быстро. То есть, как я понял, в первом файле, без имён, может быть почта, которой нет во втором и это выбирать не надо? Правильно?
Да чем угодно. На PHP или Python можно скрипт написать быстро. То есть, как я понял, в первом файле, без имён, может быть почта, которой нет во втором и это выбирать не надо? Правильно?
да
а можно без PHP или Python стандартными средствами unix grep sed awk или ещё как?)
а можно без PHP или Python стандартными средствами unix grep sed awk или ещё как?)
Тогда не ко мне вопрос.
Добавлено: 09.08.2018 1:39:53 pm
В общем, что Вам мешало сделать то же, что и я?
1. Набираем в консоли [console=inline]grep --help[/console].
2. Смотрим на опцию -f.
В итоге получилось:
[console]cat file2.txt | grep -f file1.txt[/console]
То, что надо?
При желании можно перенаправить вывод в файл:
[console]cat file2.txt | grep -f file1.txt > results.txt[/console]
[quote="pljlm8463qmw"]а можно без PHP или Python стандартными средствами unix grep sed awk или ещё как?)
Тогда не ко мне вопрос.
Добавлено: 09.08.2018 1:39:53 pm
В общем, что Вам мешало сделать то же, что и я?
1. Набираем в консоли [console=inline]grep --help[/console].
2. Смотрим на опцию -f.
В итоге получилось:
[console]cat file2.txt | grep -f file1.txt[/console]
То, что надо?
При желании можно перенаправить вывод в файл:
[console]cat file2.txt | grep -f file1.txt > results.txt[/console]
P.S. Исправил опечатку.[/quote]
я так пробовал уже не находит из-за спецсимвола наверно в строке или хз из-за чего
grep -w -f file2.txt file1.txt>result.txt
pljlm8463qmw, я Вам написал готовый пример, который Вы подправили. Потому и не работает.
Комментирую по частям:
cat file2.txt - вывод содержимого файла в консоль.
| - вертикальная черта перенаправляет вывод, вместо экрана результат передаётся следующей команде.
grep -f file1.txt - искать строки, содержащиеся в файле (ключ -f) file1.txt
> results.txt - направить вывод в файл results.txt.
Всё вместе:
[console]cat file2.txt | grep -f file1.txt > results.txt[/console]
Так и вводите, одной командой и в одну строку. Только имена файлов свои подставьте.
на Kali linux попробовал тоже пустой вывод)))
какую кодировку надо у файла
"Vascom" написал:
grep -f file2 file1
"Rizado" написал:
pljlm8463qmw, я Вам написал готовый пример, который Вы подправили. Потому и не работает.
Комментирую по частям:
cat file2.txt - вывод содержимого файла в консоль.
| - вертикальная черта перенаправляет вывод, вместо экрана результат передаётся следующей команде.
grep -f file1.txt - искать строки, содержащиеся в файле (ключ -f) file1.txt
> results.txt - направить вывод в файл results.txt.
спасибо за развернутый ответ, я понимаю о чем речь
grep -f file2 file1 так тоже должно работать, но у меня не работает почему-то(((
пробовал на windows и cygwin и на Kalilinux и результат пустой!
всё работает если в файл1 только мыла без разделителя :
если в строке не только мыло а ещё другие символы то результат пустой
Одной строчкой, то смотрите пример Rizado, просто добавить по середине еще один конвейер с командой sed 's/\r//' или tr -d "\r".
Добавлено: 09.08.2018 19:09:31
Глянул, grep может искать без учета CR, для этого есть ключик -u
Не это не экранирование а удаление символов CR как вариант тогда sed 's/\r//g'
Ну и проще просто для grep добавить ключик -u, что бы искал без учета символов CR.
Если это plain text, то у Вас вполне может быть несколько сотен миллионов записей. Здесь уже выгоднее на базу данных переходить, MySQL/MariaDB или SQLite.
Добавлено: 09.08.2018 8:21:06 pm
pljlm8463qmw, смотрите, в чём проблема. Давайте оценим вместе объём вычислений.
Вы пишете, что файлы больше 10 гигабайт, давайте примем по 10 дял удобства расчёта, даже 10^10 байт, а не 10 * 2^30.
Если адреса почты считать в среднем по 20 символов, а с именами по 40 (в реальности так и будет или даже немного меньше), то адресов почты у Вас будет 500 миллионов, а с именами вдвое меньше - 250 миллионов. И Вы хотите взять каждый из 500 миллионов адресов (по очереди!) и сверить их (тоже по очереди) с 250 миллионами строк. То есть, сравнений будет 500 * 10^6 * 250 * 10^6 = 125 * 10^15. Впечатляет? Плюс ресурсы системы на дисковые операции (если только у вас не 32 гигабайта ОЗУ, чтобы файлы там разместить), что тоже будет тормозить процесс. Если в несколько суток закончите - считайте, Вам повезло :) .
Подумайте над оптимизацией задачи или разбивкой её на части.