自分のWebサイトに、キャリッジリターンで区切られたテキストファイルにリストされているURLの長いリストがあります。たとえば、次のようになります。
いくつかの並列wgetを生成して、各URLを2回ヒットし、特定のヘッダーを確認して取得し、その結果を配列に保存して、素敵なレポートに出力する必要があります。
次のxargsコマンドを使用して、必要なものの一部を取得します。
xargs -x -P 20 -n 1 wget --server-response -q -O - --delete-after<./urls.txt 2>&1 | grep Caching
問題は、このコマンドを2回実行して、以下を保存する方法です。
したがって、出力は次のようになります。
=====================================================
http:/www.mysite.com/url1.html
=====================================================
First Hit: Caching: MISS
Second Hit: Caching: HIT
=====================================================
http:/www.mysite.com/url2.html
=====================================================
First Hit: Caching: MISS
Second Hit: Caching: HIT
などなど。
ヘッダーがURLに関連付けられている限り、URLが表示される順序は必ずしも問題ではありません。
URLの数が多いため、複数のURLを連続してではなく並列にヒットする必要があります。そうしないと、時間がかかりすぎます。
秘訣は、複数の並列wgetを取得し、その結果を意味のある方法で保存する方法です。これを行うためのより論理的な方法がある場合、私は配列を使用することに結婚していません(多分ログファイルに書き込む?)
bashの達人は、私がどのように進めるかについて何か提案がありますか?
(terdonのコードに基づいて)単一のURLを指定して正しいことを行う小さなスクリプトを作成します。
#!/bin/bash
url=$1
echo "=======================================";
echo "$url"
echo "=======================================";
echo -n "First Hit: Caching: ";
wget --server-response -q -O - $url 2>&1 | grep Caching >/dev/null
if [ $? == 0 ]; then echo HIT; else echo MISS; fi;
echo -n "Second Hit: Caching: ";
wget --server-response -q -O - $url 2>&1 | grep Caching >/dev/null
if [ $? == 0 ]; then echo HIT; else echo MISS; fi; echo "";
次に、GNU Parallelを使用して、このスクリプトを並行して(たとえば、一度に500ジョブ)実行します。
cat urls.txt | parallel -j500 my_script
GNU Parallelは、2つのプロセスからの出力が決して混合されないことを保証します-xargsが与えない保証。
GNU Parallelの詳細については、http://www.gnu.org/s/parallel/を参照してください。
以下を使用すると、わずか10秒でGNUParallelをインストールできます。
wget -O - pi.dk/3 | sh
http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1で紹介ビデオをご覧ください
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加