2016-04-17 1 views
0

私はオオヤマネコw3mのまたはリンクなどのテキストブラウザが使用可能なリンクのリストから大量のクエリを実行したいです。結果はキーワードのためにフィルタリングされ、元のリストに追加する必要があります。 たとえば、リストはlist.txtになりましょう:私は1つのリンクのみの時間、例えばを提出した場合バルクウェブサイトのクエリ使用して、テキストベースのブラウザは

"http://dict.cc//?s=Chemical" 
"http://dict.cc//?s=Fenster" 

が、私は結果を抽出することができます

head -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p' 
tail -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p' 

期待通りに動作しますが、ない

cat list.txt | xargs links -dump | sed -n '/NOUN/p' 

または

for line in `cat list.txt`; do links -dump $line ; done 

私が間違って何をしているのですか? list.txtには、操作の後、このようになりますように、次のステップは、出力は、正しい行にリストに追加する必要があります。

"http://dict.cc//?s=Chemical" edit NOUN a chemical | chemicals  - 
"http://dict.cc//?s=Fenster" NOUN das Fenster | die Fenster edit 

ペーストのような他のツールとの組み合わせや使用方法によって可能であるべきなどこれは、よりよい解決策になるものを、上記のように動作しません?:

for line in `cat list.txt`; do echo -n $line && links -dump $line; done 

例は単なるデモンストレーションのために、私はdict.cc以外のサイトを使用しますです。残念ながら、API/RESTは利用できません。

答えて

0

私はコマンドでtwiddledています。問題は、list.txtで与えられたURLの二重引用符にあります。除去した後、これは正常に動作します:

for line in `cat engl.txt`; do 
    echo -n $line && links -dump $line| sed -n '/NOUN/p' 
done 

1は、上記xargsの作品(ただし、コマンドによって渡さリンクへのコマンドとして、ファイル内のエントリを使用して、二重引用符を保つ(しなければならない)場合は、単に上記):

for line in `cat list.txt`; do 
    echo -n $line && echo $line | xargs links -dump | sed -n '/NOUN/p' 
done 
1

xargsは、引数の数を制限しない限り、プログラムに複数の引数を同時に渡します。xargs -n1 links -dump。たぶんリンクは1つの引数しか受け付けません。正確なファイルがURLにのみ必要で、他のリンクされたドキュメントは必要ない場合は、curlも使用できます。

は任意の空白で区切ります。したがって、list.txtの行にスペースが含まれているとうまくいきません。

は、リストを反復処理するために、これを試してみてください:私はバグを見つけるまで

cat 'list.txt' | while IFS= read -r line; do 
    echo -n $line && links -dump $line 
done 
関連する問題