複数の並列wgetを生成して保存すると、すべてのwgetが完了したときにbash配列がきれいに出力されます。

ブラッド

自分のWebサイトに、キャリッジリターンで区切られたテキストファイルにリストされているURLの長いリストがあります。たとえば、次のようになります。

  • http:/www.mysite.com/url1.html
  • http:/www.mysite.com/url2.html
  • http:/www.mysite.com/url3.html

いくつかの並列wgetを生成して、各URLを2回ヒットし、特定のヘッダーを確認して取得し、その結果を配列に保存して、素敵なレポートに出力する必要があります。

次のxargsコマンドを使用して、必要なものの一部を取得します。

xargs -x -P 20 -n 1 wget --server-response -q -O - --delete-after<./urls.txt 2>&1 | grep Caching

問題は、このコマンドを2回実行して、以下を保存する方法です。

  1. ヒットしたURL
  2. Cachingヘッダーに対するgrepの最初の結果
  3. Cachingヘッダーに対するgrepの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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ