<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Задача по передачи параметра в нужное место]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=24354&amp;type=atom" />
	<updated>2012-09-22T14:20:15Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=24354</id>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299557#p299557" />
			<content type="html"><![CDATA[<p>В общем вопрос решен. Не cat там виновник, а опция xargs -n которая задает максимальное количество считываемых параметров. В моем случае достаточно задать -n5 и все работает!<br />Тему можно закрывать.</p>]]></content>
			<author>
				<name><![CDATA[valet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=13273</uri>
			</author>
			<updated>2012-09-22T14:20:15Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299557#p299557</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299556#p299556" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[valet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=13273</uri>
			</author>
			<updated>2012-09-22T14:00:08Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299556#p299556</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299533#p299533" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[valet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=13273</uri>
			</author>
			<updated>2012-09-21T21:55:22Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299533#p299533</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299376#p299376" />
			<content type="html"><![CDATA[<p>Естественно наши скрипты были лишь примерами, доработать которые тебе надо было самому.<br />И в первом посте многопоточность не была обязательным условием.</p>]]></content>
			<author>
				<name><![CDATA[Vascom]]></name>
				<uri>https://linuxforum.ru/profile.php?id=5339</uri>
			</author>
			<updated>2012-09-21T04:58:16Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299376#p299376</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299370#p299370" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[valet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=13273</uri>
			</author>
			<updated>2012-09-20T22:57:18Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299370#p299370</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299368#p299368" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2012-09-20T20:45:40Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299368#p299368</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299364#p299364" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[valet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=13273</uri>
			</author>
			<updated>2012-09-20T19:47:33Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299364#p299364</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299304#p299304" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Vascom]]></name>
				<uri>https://linuxforum.ru/profile.php?id=5339</uri>
			</author>
			<updated>2012-09-20T07:51:32Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299304#p299304</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Задача по передачи параметра в нужное место]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=299276#p299276" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[valet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=13273</uri>
			</author>
			<updated>2012-09-20T04:56:17Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=299276#p299276</id>
		</entry>
</feed>
