<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=39847</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=39847&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «grep или чем ещё можно выбрать все строки файла1 из файла2?».]]></description>
		<lastBuildDate>Fri, 10 Aug 2018 05:12:27 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461710#p461710</link>
			<description><![CDATA[<div class="quotebox"><cite>Rizado пишет:</cite><blockquote><p>Если это plain text, то у Вас вполне может быть несколько сотен миллионов записей. Здесь уже выгоднее на базу данных переходить, MySQL/MariaDB или SQLite.<br />*** Добавлено: 09.08.2018 8:21:06 pm ***</p><p>pljlm8463qmw, смотрите, в чём проблема. Давайте оценим вместе объём вычислений.</p><p>Вы пишете, что файлы больше 10 гигабайт, давайте примем по 10 дял удобства расчёта, даже 10^10 байт, а не 10 * 2^30.</p><p>Если адреса почты считать в среднем по 20 символов, а с именами по 40 (в реальности так и будет или даже немного меньше), то адресов почты у Вас будет 500 миллионов, а с именами вдвое меньше - 250 миллионов. И Вы хотите взять каждый из 500 миллионов адресов (по очереди!) и сверить их (тоже по очереди) с 250 миллионами строк. То есть, сравнений будет 500 * 10^6 * 250 * 10^6 = 125 * 10^15. Впечатляет? Плюс ресурсы системы на дисковые операции (если только у вас не 32 гигабайта ОЗУ, чтобы файлы там разместить), что тоже будет тормозить процесс. Если в несколько суток закончите - считайте, Вам повезло ab .</p><p>Подумайте над оптимизацией задачи или разбивкой её на части.</p></blockquote></div><p>с базой sqllite делал уже программу на делфи,&nbsp; достаточно долгий процесс добавления такого количества записей в базу <br />Хорошая мысль! загрузить второй файл с мылами в оперативку и сделать четырехмерный массив по буквам и потом сравнивать с файлом1 тут скорость должна быть намного больше, ограниченна только скоростью чтения с диска<br /><strong>*** Добавлено: 10.08.2018 13:11:42 ***</strong></p><div class="quotebox"><cite>ormorph пишет:</cite><blockquote><p>А пардон, это не работает.<br />Как вариант одной строчкой:<br />Консоль<br />$ cat file3|dos2unix |xargs -i grep &quot;{}&quot; file2</p><p>или такой:<br />Консоль<br />$ cat file3|sed &#039;s/\r//g&#039; |xargs -i grep &quot;{}&quot; file2</p><p>Либо можно сделать скрипт bash:</p><p>#!/bin/bash<br />r1=$1<br />r2=$2<br />CR=$(echo -e &quot;\r&quot;)<br />cat $r1|while read file<br />do<br />&nbsp; &nbsp;file=${file/$CR/}<br />&nbsp; &nbsp;grep &quot;$file&quot; $r2<br />done</p><p>И уже запускать скрипт для обработки файлов:<br />Консоль<br />$ script.sh file1 file2</p></blockquote></div><br /><p>Спасибо за совет&nbsp; <img src="https://linuxforum.ru/img/smilies/bx.gif" alt="bx" /></p><p><strong>*** Добавлено: 10.08.2018 13:12:27 ***</strong></p><p>Ребята всем спасибо, помогли&nbsp; <img src="https://linuxforum.ru/img/smilies/ay.gif" alt="ay" /><br /></p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Fri, 10 Aug 2018 05:12:27 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461710#p461710</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461709#p461709</link>
			<description><![CDATA[<div class="quotebox"><cite>pljlm8463qmw пишет:</cite><blockquote><p>не пойму как это работает, не получается у меня правильно сделать ab</p></blockquote></div><p>А пардон, это не работает.<br />Как вариант одной строчкой:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ cat file3|dos2unix |xargs -i grep &quot;{}&quot; file2</div><br />или такой:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ cat file3|sed &#039;s/\r//g&#039; |xargs -i grep &quot;{}&quot; file2</div><br />Либо можно сделать скрипт bash:<br /></p><div class="codebox"><pre><code>#!/bin/bash
r1=$1
r2=$2
CR=$(echo -e &quot;\r&quot;)
cat $r1|while read file
do
   file=${file/$CR/}
   grep &quot;$file&quot; $r2
done</code></pre></div><p>И уже запускать скрипт для обработки файлов:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ script.sh file1 file2</div></p>]]></description>
			<author><![CDATA[null@example.com (ormorph)]]></author>
			<pubDate>Thu, 09 Aug 2018 17:37:41 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461709#p461709</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461708#p461708</link>
			<description><![CDATA[<div class="quotebox"><cite>pljlm8463qmw пишет:</cite><blockquote><p>файлы очень большие &gt;10ГБ</p></blockquote></div><p>Если это plain text, то у Вас вполне может быть несколько сотен миллионов записей. Здесь уже выгоднее на базу данных переходить, MySQL/MariaDB или SQLite.<br /><strong>*** Добавлено: 09.08.2018 8:21:06 pm ***</strong></p><p><strong>pljlm8463qmw</strong>, смотрите, в чём проблема. Давайте оценим вместе объём вычислений.</p><p>Вы пишете, что файлы больше 10 гигабайт, давайте примем по 10 дял удобства расчёта, даже 10^10 байт, а не 10 * 2^30.</p><p>Если адреса почты считать в среднем по 20 символов, а с именами по 40 (в реальности так и будет или даже немного меньше), то адресов почты у Вас будет 500 миллионов, а с именами вдвое меньше - 250 миллионов. И Вы хотите взять каждый из 500 миллионов адресов (по очереди!) и сверить их (тоже по очереди) с 250 миллионами строк. То есть, сравнений будет 500 * 10^6 * 250 * 10^6 = 125 * 10^15. Впечатляет? Плюс ресурсы системы на дисковые операции (если только у вас не 32 гигабайта ОЗУ, чтобы файлы там разместить), что тоже будет тормозить процесс. Если в несколько суток закончите - считайте, Вам повезло <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /> .</p><p>Подумайте над оптимизацией задачи или разбивкой её на части.<br /></p>]]></description>
			<author><![CDATA[null@example.com (Rizado)]]></author>
			<pubDate>Thu, 09 Aug 2018 17:21:06 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461708#p461708</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461707#p461707</link>
			<description><![CDATA[<div class="quotebox"><cite>ormorph пишет:</cite><blockquote><p>Не это не экранирование а удаление символов CR как вариант тогда sed &#039;s/\r//g&#039;</p></blockquote></div><p> так тоже работает спец символ \ в \r экранирует что&nbsp; sed &#039;s/\r//g&#039;&nbsp; что sed &#039;s%\r%%&#039;&nbsp; разницы нет<br /></p><div class="quotebox"><cite>ormorph пишет:</cite><blockquote><p>Ну и проще просто для grep добавить ключик -u, что бы искал без учета символов CR.</p></blockquote></div><p> не пойму как это работает, не получается у меня правильно сделать <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /><br /><strong>*** Добавлено: 10.08.2018 00:38:19 ***</strong></p><p>grep -u -f file2 file1 не работает)<br /></p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Thu, 09 Aug 2018 16:38:19 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461707#p461707</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461706#p461706</link>
			<description><![CDATA[<div class="quotebox"><cite>pljlm8463qmw пишет:</cite><blockquote><p>экранирование с помощью &quot;\&quot; не помогло</p></blockquote></div><p>Не это не экранирование а удаление символов <strong>CR</strong> как вариант тогда <strong>sed &#039;s/\r//g&#039; </strong><br />Ну и проще просто для grep добавить ключик <strong>-u</strong>, что бы искал без учета символов <strong>CR</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (ormorph)]]></author>
			<pubDate>Thu, 09 Aug 2018 16:14:28 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461706#p461706</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461705#p461705</link>
			<description><![CDATA[<div class="quotebox"><cite>ormorph пишет:</cite><blockquote><p>sed &#039;s/\r//&#039; или tr -d &quot;\r&quot;.</p></blockquote></div><p>экранирование с помощью &quot;\&quot; не помогло</p><p>sed &#039;s%\r%%g&#039; так работает</p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Thu, 09 Aug 2018 16:09:42 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461705#p461705</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461704#p461704</link>
			<description><![CDATA[<p>Одной строчкой, то смотрите пример <strong>Rizado</strong>, просто добавить по середине еще один конвейер с командой <strong>sed &#039;s/\r//&#039;</strong> или <strong>tr -d &quot;\r&quot;</strong>.<br /><strong>*** Добавлено: 09.08.2018 19:09:31 ***</strong></p><p>Глянул, <strong>grep</strong> может искать без учета CR, для этого есть ключик <strong>-u</strong></p>]]></description>
			<author><![CDATA[null@example.com (ormorph)]]></author>
			<pubDate>Thu, 09 Aug 2018 16:09:31 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461704#p461704</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461703#p461703</link>
			<description><![CDATA[<div class="quotebox"><cite>ormorph пишет:</cite><blockquote><p>Ну а если на оборот?:</p></blockquote></div><p>пробовал тоже пустой результат</p><p>инфа 100% он ищет точное совпадение походу строк и если кроме мыла другие символы в строке то пустой результат</p><p>не пойму как у Vascom работает<br /><strong>*** Добавлено: 09.08.2018 23:24:54 ***</strong></p><div class="quotebox"><cite>Vascom пишет:</cite><blockquote><p>Может проблемы из-за символов окончания строки?</p></blockquote></div><p>точно! спасибо&nbsp; </p><p>\r удалил в текстовом редакторе в файлах и всё получилось</p><p>а как бы это в одной команде сделать всё?) grep + sed ?</p><p><strong>*** Добавлено: 09.08.2018 23:25:50 ***</strong></p><p>файлы очень большие &gt;10ГБ<br /></p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Thu, 09 Aug 2018 15:25:50 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461703#p461703</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461702#p461702</link>
			<description><![CDATA[<p>Может проблемы из-за символов окончания строки?</p>]]></description>
			<author><![CDATA[null@example.com (Vascom)]]></author>
			<pubDate>Thu, 09 Aug 2018 15:16:27 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461702#p461702</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461701#p461701</link>
			<description><![CDATA[<p>на Kali linux попробовал тоже пустой вывод)))<br />какую кодировку надо у файла</p><div class="quotebox"><cite>Vascom пишет:</cite><blockquote><p>grep -f file2 file1</p></blockquote></div><div class="quotebox"><cite>Rizado пишет:</cite><blockquote><p>pljlm8463qmw, я Вам написал готовый пример, который Вы подправили. Потому и не работает.<br />Комментирую по частям:<br />cat file2.txt - вывод содержимого файла в консоль.<br />| - вертикальная черта перенаправляет вывод, вместо экрана результат передаётся следующей команде.<br />grep -f file1.txt - искать строки, содержащиеся в файле (ключ -f) file1.txt<br />&gt; results.txt - направить вывод в файл results.txt.</p></blockquote></div><p>спасибо за развернутый ответ, я понимаю о чем речь<br />grep -f file2 file1 так тоже должно работать, но у меня не работает почему-то(((</p><p>пробовал на&nbsp; windows и cygwin и на Kalilinux и результат пустой!<br />всё работает если в файл1 только мыла без разделителя :<br />если в строке не только мыло а ещё другие символы то результат пустой</p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Thu, 09 Aug 2018 15:14:22 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461701#p461701</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461700#p461700</link>
			<description><![CDATA[<div class="quotebox"><cite>pljlm8463qmw пишет:</cite><blockquote><p>видимо он криво работает.... ничего не пойму</p></blockquote></div><p>Ну а если на оборот?:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">$ grep -f file1 file2</div></p>]]></description>
			<author><![CDATA[null@example.com (ormorph)]]></author>
			<pubDate>Thu, 09 Aug 2018 15:05:06 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461700#p461700</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461699#p461699</link>
			<description><![CDATA[<p><strong>pljlm8463qmw</strong>, я Вам написал готовый пример, который Вы подправили. Потому и не работает.<br />Комментирую по частям:<br />cat file2.txt - вывод содержимого файла в консоль.<br />| - вертикальная черта перенаправляет вывод, вместо экрана результат передаётся следующей команде.<br />grep -f file1.txt - искать строки, содержащиеся в файле (ключ -f) file1.txt<br />&gt; results.txt - направить вывод в файл results.txt.<br />Всё вместе:<br /><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">cat file2.txt | grep -f file1.txt &gt; results.txt</div><br />Так и вводите, одной командой и в одну строку. Только имена файлов свои подставьте.</p>]]></description>
			<author><![CDATA[null@example.com (Rizado)]]></author>
			<pubDate>Thu, 09 Aug 2018 13:17:34 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461699#p461699</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461698#p461698</link>
			<description><![CDATA[<div class="quotebox"><cite>Vascom пишет:</cite><blockquote><p>Я попробовал - всё работает:<br /></p><div class="codebox"><pre><code>$ grep -f file2 file1
vasya@mail.ru:Vasya
petya@list.ru:Petr Ivanov
sasha@bk.ru:Sasha S.</code></pre></div></blockquote></div><br /><p>я пробую на windows в&nbsp; cygwin</p><p>видимо он криво работает.... ничего не пойму</p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Thu, 09 Aug 2018 13:12:57 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461698#p461698</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461697#p461697</link>
			<description><![CDATA[<p>Я попробовал - всё работает:<br /></p><div class="codebox"><pre><code>$ grep -f file2 file1
vasya@mail.ru:Vasya
petya@list.ru:Petr Ivanov
sasha@bk.ru:Sasha S.</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Vascom)]]></author>
			<pubDate>Thu, 09 Aug 2018 12:56:55 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461697#p461697</guid>
		</item>
		<item>
			<title><![CDATA[Re: grep или чем ещё можно выбрать все строки файла1 из файла2?]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=461696#p461696</link>
			<description><![CDATA[<div class="quotebox"><cite>Rizado пишет:</cite><blockquote><div class="quotebox"><cite>pljlm8463qmw пишет:</cite><blockquote><p>вот сам попробуй</p></blockquote></div><p>Для начала просьба повежливее. Я не давал согласия на &quot;ты&quot;.</p></blockquote></div><p>прошу&nbsp; прощения</p>]]></description>
			<author><![CDATA[null@example.com (pljlm8463qmw)]]></author>
			<pubDate>Thu, 09 Aug 2018 12:53:02 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=461696#p461696</guid>
		</item>
	</channel>
</rss>
