<?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; Задача по передачи параметра в нужное место]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=24354</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=24354&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Задача по передачи параметра в нужное место».]]></description>
		<lastBuildDate>Sat, 22 Sep 2012 14:20:15 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299557#p299557</link>
			<description><![CDATA[<p>В общем вопрос решен. Не cat там виновник, а опция xargs -n которая задает максимальное количество считываемых параметров. В моем случае достаточно задать -n5 и все работает!<br />Тему можно закрывать.</p>]]></description>
			<author><![CDATA[null@example.com (valet)]]></author>
			<pubDate>Sat, 22 Sep 2012 14:20:15 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299557#p299557</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299556#p299556</link>
			<description><![CDATA[<p>В контексте этой задачи, появилась новая - тоже никак не могу сам разобраться.</p><p>Стоит задача многопоточно отправлять get-запросы по нужным урл-ам с использованием socks5 с авторизацией. Для реализации был выбран curl, так как wget не поддерживает socks5 тем более с авторизацией.</p><p>В упрощенном виде (если не использовать socks5) решается так:<br /></p><div class="codebox"><pre><code>cat urls.txt | xargs -t -P 20 -n1 curl</code></pre></div><p>urls.txt - список урл-ов в формате:<br /></p><div class="quotebox"><blockquote><p><a href="http://mydomen.ru/file1.txt">http://mydomen.ru/file1.txt</a><br />...<br /><a href="http://mydomen.ru/filen.txt">http://mydomen.ru/filen.txt</a></p></blockquote></div><p>-P 20 - количество потоков</p><p>И все это прекрасно работает - если в файле urls.txt только урл-ы (по одному слову в одной строке).<br />Ну вот если добавить параметры для подключения к socks5:<br /></p><div class="quotebox"><blockquote><p>--socks5 xx.xx.xx.xx:1080 --proxy-user proxylogin1:proxyparol1 <a href="http://mydomen.ru/file1.txt">http://mydomen.ru/file1.txt</a><br />...<br />--socks5 xx.xx.xx.xx:1080 --proxy-user proxylogin100500:proxyparol100500 <a href="http://mydomen.ru/filen.txt">http://mydomen.ru/filen.txt</a></p></blockquote></div><p>то конструкция </p><div class="codebox"><pre><code>cat urls.txt | xargs -t -P 20 -n1 curl</code></pre></div><p> уже не работает, потому что в вывод идут не строки целиком, а отдельные слова со строк (очевидно так работает cat), то есть отдельно --socks5, xx.xx.xx.xx:1080 и т.д. - соответственно ничего не работает.<br />Казалось бы можно задать параметры curl&#039;а непосредственно при вызове, то есть так:<br /></p><div class="codebox"><pre><code>cat urls.txt | xargs -t -P 20 -n1 curl --socks5 xx.xx.xx.xx:1080 --proxy-user proxylogin1:proxyparol1</code></pre></div><p>, но тогда я смогу использовать только один прокси, но стоит задача использовать случайный из 500 проксей при каждом отдельном подключении.<br />Пробовал сделать так:<br />в файле urls.txt - только урл-ы, в файле socks5.txt:<br /></p><div class="quotebox"><blockquote><p>--socks5 xx.xx.xx.xx:1080 --proxy-user proxylogin1:proxyparol1<br />...<br />--socks5 xx.xx.xx.xx:1080 --proxy-user proxylogin500:proxyparol500</p></blockquote></div><p>и пробовал такую конструкцию:<br /></p><div class="quotebox"><blockquote><p>cat urls.txt | xargs -t -P 20 -n1 curl `cat socks5.txt | shuf -n1`</p></blockquote></div><p>`cat socks5.txt | shuf -n1` - возвращает случайную строку, но срабатывает то 1 раз, поэтому прокси выбирается действительно случайно, но он один на все потоки.</p><p>Как бы задача сводится к одному из двух:<br />1. либо как-то организовать случайность выбора здесь в выделенном cat urls.txt | xargs -t -P 20 -n1 curl <strong>`cat socks5.txt | shuf -n1`</strong> чтобы срабатывало каждый раз, а не только 1 раз.<br />2. либо заставить как-то вместо cat urls.txt выводить данные именно построчно.</p><p>Сразу прошу прощения, если выражаю свои мысли сумбурно, у меня почти каша в голове, так что просьба сильно не пинать.</p>]]></description>
			<author><![CDATA[null@example.com (valet)]]></author>
			<pubDate>Sat, 22 Sep 2012 14:00:08 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299556#p299556</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299533#p299533</link>
			<description><![CDATA[<div class="quotebox"><cite>Vascom пишет:</cite><blockquote><p>И в первом посте многопоточность не была обязательным условием.</p></blockquote></div><p> Возможно, я как-то не заострил на этом внимания, хотя мой пример был как раз многопоточный.</p><div class="quotebox"><cite>Vascom пишет:</cite><blockquote><p>Естественно наши скрипты были лишь примерами, доработать которые тебе надо было самому.</p></blockquote></div><p> Да, спасибо за помощь. Ваши примеры меня натолкнули на решения вопроса.</p><p>Спасибо всем, тему можно перенести в решенные или закрыть.</p>]]></description>
			<author><![CDATA[null@example.com (valet)]]></author>
			<pubDate>Fri, 21 Sep 2012 21:55:22 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299533#p299533</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299376#p299376</link>
			<description><![CDATA[<p>Естественно наши скрипты были лишь примерами, доработать которые тебе надо было самому.<br />И в первом посте многопоточность не была обязательным условием.</p>]]></description>
			<author><![CDATA[null@example.com (Vascom)]]></author>
			<pubDate>Fri, 21 Sep 2012 04:58:16 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299376#p299376</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299370#p299370</link>
			<description><![CDATA[<div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><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">alexander@goblin-book /tmp $ cat &gt;url.txt<br /><a href="http://yandex.ru/">http://yandex.ru/</a><br /><a href="http://google.ru/">http://google.ru/</a><br /><a href="http://rambler.ru/">http://rambler.ru/</a><br />alexander@goblin-book /tmp $ cat url.txt | while read url; do echo -n &quot;$url|&quot;; wget --quiet -O - &quot;<a href="http://clck.ru/--?url=$url">http://clck.ru/--?url=$url</a>&quot;; echo; done<br /><a href="http://yandex.ru/|http://clck.ru/FjYZ">http://yandex.ru/|http://clck.ru/FjYZ</a><br /><a href="http://google.ru/|http://clck.ru/HYqE">http://google.ru/|http://clck.ru/HYqE</a><br /><a href="http://rambler.ru/|http://clck.ru/1HkR">http://rambler.ru/|http://clck.ru/1HkR</a></div></p></blockquote></div><p>Спасибо конечно, но тоже ж не то - ну однопоточно же, в том то и фишка, что надо многопоточно. Представляете сколько времени уйдет, чтобы собрать 60 тысяч сокращений.</p><p>Как это сделал я...<br />Написал php-скрипт, который принимая get-параметр l, вытягивает строку под номером l из файла с урл-ами, обращается curl&#039;ом на clck.ru за укороченной ссылкой и дописывает в файл урл и укороченный урл через разделитель |.<br />Сформировал такой файл (ну не calc&#039;ом же генерить последовательность <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" />):<br /></p><div class="codebox"><pre><code>#!/bin/bash
i=1
rm urls_for_short
while [ $i -lt 60459 ]
do
  echo &quot;http://domen.ru/clck.php?l=$i&quot; &gt;&gt; urls_for_short
  #echo $i &gt;&gt; urls_for_short
  i=$[$i+1]
done</code></pre></div><p>Получил файл в формате:<br /></p><div class="quotebox"><blockquote><p><a href="http://domen.ru/clck.php?l=1">http://domen.ru/clck.php?l=1</a><br /><a href="http://domen.ru/clck.php?l=2">http://domen.ru/clck.php?l=2</a><br />...<br /><a href="http://domen.ru/clck.php?l=60458">http://domen.ru/clck.php?l=60458</a></p></blockquote></div><p>Осталось только wget-ом многопоточно запустить дергания скрипта, что я и сделал в 200 потоков:<br /></p><div class="codebox"><pre><code>cat urls_for_short | xargs -t -P 200 -n1 wget --quiet -O -</code></pre></div><p>В результате прошло минут 10 (точно не засекал) и я получил в файле свои 60 тысяч сокращений.</p>]]></description>
			<author><![CDATA[null@example.com (valet)]]></author>
			<pubDate>Thu, 20 Sep 2012 22:57:18 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299370#p299370</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299368#p299368</link>
			<description><![CDATA[<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">alexander@goblin-book /tmp $ cat &gt;url.txt<br /><a href="http://yandex.ru/">http://yandex.ru/</a><br /><a href="http://google.ru/">http://google.ru/</a><br /><a href="http://rambler.ru/">http://rambler.ru/</a><br />alexander@goblin-book /tmp $ cat url.txt | while read url; do echo -n &quot;$url|&quot;; wget --quiet -O - &quot;<a href="http://clck.ru/--?url=$url">http://clck.ru/--?url=$url</a>&quot;; echo; done<br /><a href="http://yandex.ru/|http://clck.ru/FjYZ">http://yandex.ru/|http://clck.ru/FjYZ</a><br /><a href="http://google.ru/|http://clck.ru/HYqE">http://google.ru/|http://clck.ru/HYqE</a><br /><a href="http://rambler.ru/|http://clck.ru/1HkR">http://rambler.ru/|http://clck.ru/1HkR</a></div></p>]]></description>
			<author><![CDATA[null@example.com (Fat-Zer)]]></author>
			<pubDate>Thu, 20 Sep 2012 20:45:40 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299368#p299368</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299364#p299364</link>
			<description><![CDATA[<div class="quotebox"><cite>Vascom пишет:</cite><blockquote><p>Держи скриптик</p><div class="codebox"><pre><code>#!/bin/bash

URLS=&quot;http://yandex.ru/
http://google.ru/
http://rambler.ru/&quot;

rm url_short.txt
for URL in `echo &quot;$URLS&quot;`
do
    echo -n &quot;$URL|&quot; &gt;&gt; url_short.txt
    wget &quot;http://clck.ru/--?url=$URL&quot; --quiet -O - &gt;&gt; url_short.txt
    echo &quot;\n&quot; &gt;&gt; url_short.txt
done</code></pre></div></blockquote></div><p>Спасибо конечно, но не совсем то, что нужно:<br />1. Однопоточно, соответственно будет очень долго отрабатывать если много урл-ов<br />2. Нужно чтение из файла с урл-ами, но не кидать же прямо в bash-скрипт 70 тысяч урл-ов (именно столько у меня)</p>]]></description>
			<author><![CDATA[null@example.com (valet)]]></author>
			<pubDate>Thu, 20 Sep 2012 19:47:33 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299364#p299364</guid>
		</item>
		<item>
			<title><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299304#p299304</link>
			<description><![CDATA[<p>Держи скриптик</p><div class="codebox"><pre><code>#!/bin/bash

URLS=&quot;http://yandex.ru/
http://google.ru/
http://rambler.ru/&quot;

rm url_short.txt
for URL in `echo &quot;$URLS&quot;`
do
    echo -n &quot;$URL|&quot; &gt;&gt; url_short.txt
    wget &quot;http://clck.ru/--?url=$URL&quot; --quiet -O - &gt;&gt; url_short.txt
    echo &quot;\n&quot; &gt;&gt; url_short.txt
done</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Vascom)]]></author>
			<pubDate>Thu, 20 Sep 2012 07:51:32 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299304#p299304</guid>
		</item>
		<item>
			<title><![CDATA[Задача по передачи параметра в нужное место]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=299276#p299276</link>
			<description><![CDATA[<p>Появилась необходимость сократить большое количество урл-ов. Решил воспользоваться API от <a href="http://clck.ru">http://clck.ru</a> (сокращатель урл-ов от яндкеса).</p><p>Чтобы получить короткую ссылку для нашего урл достаточно отправить get-запрос <a href="http://clck.ru/--?url=нашурл">http://clck.ru/--?url=нашурл</a></p><p>Поэтому у меня в файле url.txt:<br /></p><div class="quotebox"><blockquote><p><a href="http://clck.ru/--?url=http://yandex.ru/">http://clck.ru/--?url=http://yandex.ru/</a><br /><a href="http://clck.ru/--?url=http://google.ru/">http://clck.ru/--?url=http://google.ru/</a><br /><a href="http://clck.ru/--?url=http://rambler.ru/">http://clck.ru/--?url=http://rambler.ru/</a><br />...</p></blockquote></div><p>Можно воспользоваться wget&#039;ом:<br /></p><div class="codebox"><pre><code>cat url.txt | xargs -t -P 5 -n1 wget --quiet -O - &gt; url_short.txt</code></pre></div><p>Здесь:<br />5 - это количество потоков<br />--quiet -O - режим при котором не скачиваются файлы (файлы скачивать не надо, надо сразу получать то, что отдается сервером при get-запросе)</p><p>В результате чего в файле url_short.txt будет примерно следующее:<br /></p><div class="quotebox"><blockquote><p><a href="http://clck.ru/FjYZhttp://clck.ru/1HkRhttp://clck.ru/HYqE">http://clck.ru/FjYZhttp://clck.ru/1HkRh … ck.ru/HYqE</a></p></blockquote></div><p>Разбить тем же sed&#039;ом на отдельные строки конечно не проблема, но вот мне хотелось бы сохранять через разделитель оригинальный урл, то есть получить что-то вроде такого:<br /></p><div class="quotebox"><blockquote><p><a href="http://yandex.ru/|http://clck.ru/FjYZ">http://yandex.ru/|http://clck.ru/FjYZ</a><br /><a href="http://google.ru/|http://clck.ru/1HkR">http://google.ru/|http://clck.ru/1HkR</a><br /><a href="http://rambler.ru/|http://clck.ru/HYqE">http://rambler.ru/|http://clck.ru/HYqE</a></p></blockquote></div><p>То есть как я понимаю мне надо как-то заставить wget не только стягивать по урл-у и записывать ответ, а еще и записывать урл, по которому он тянет.<br />Но моих знаний не хватает, чтобы передать еще 1 параметр, который бы писался в результующий файл.</p><p>Надеюсь это элементарно на самом деле <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /> и кто-то мне подскажет.</p>]]></description>
			<author><![CDATA[null@example.com (valet)]]></author>
			<pubDate>Thu, 20 Sep 2012 04:56:17 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=299276#p299276</guid>
		</item>
	</channel>
</rss>
