2012-03-20 14 views
1

を作る現在、私は、ファイルから特定のURLを削除するには、次を使用しますURL)追加ルールを追加する必要があります。ファイルからURLのリストを取得し、番号のアレイ

fileAのファイルからURLのリストを取得し、それらを配列arrayBに配置し、indexBのURLをユーザーに表示したいとします。

次に、削除しないURLのURLにindexBという数字を入力します。これらの数値を高値から低値にソー​​トして、arrayBを調べ、最高のインデックスから始まる対応するインデックス番号を削除します。この時点で私の配列には、ページfileAから削除する必要のあるURLだけが含まれています。

私は再びfileAを訪れ、ページと配列にURLが見つかると、そのURLをfileAからfileBに削除します。

私の主な関心事は、すべて一緒に行を削除し、ページのURLが1行にあるときに、fileAarrayBを比較し、arrayBであるfileA内のURLを削除する方法今です。

警告には、1つの行に1つの悪いURLと1つ以上の悪いURLがあり、その対処方法がわからないことがあります。

+1

私が正しく理解していれば、fileAのURLはブラックリスト候補のリストです(fileA = newfile)? URLのリストの形式は何ですか? 1つの文字列= 1行= 1つのURL?ソースとターゲットの短い例がうまくいくでしょう。 –

+0

お返事ありがとうございます。私のfileAは、http:.... urlがページの中に入っているhtmlソースファイルです。 1行に複数行、時には1行に2行、テキストの中に隠れる行があります。 FileAはクリーンアップする必要があります。 –

答えて

1

説明に問題がありますが、あなたはなぜあなたのアプローチについての多くの詳細を説明しているのですか?それは私に過度に指定されて見えます。注文は本当に重要ではありません。だからここ

は異なるアプローチです:

#!/bin/bash 
# 
removeUnmatched() { 
    key=$1 
    shift 
    for element 
    do 
     if [[ $key = $element ]] 
     then 
      # echo only for debugging 
      echo "found $key" 
      return 
     fi 
    done 
    # sed '/$url/d' fileA 
    echo remove $url from fileA 
} 

# 
# I guess you want to extract urlnames from fileA, so this would be 
# urls=($(yourCommandOn fileA)) 
# 
urls=($(< blacklist)) 
echo "Exclude from blacklist: (Ctrl-D to end)" 
collect=$(select url in ${urls[@]} 
do 
    echo $url 
done) 
whitelist=($collect) 
# echo ${whitelist[@]} 
for url in ${urls[@]} 
do 
    removeUnmatched $url ${whitelist[@]} 
done 

は、私は、配列を使用していますが、そのインデックスでは動作しません。 Bashs selectコマンドは、索引で機能します。

fileAから自動的にURLを取得する方法がわかりません。選択肢を後で使用するために保存するかどうか(理由はどうか)。

+0

ありがとうございます。あなたの詳細については、おそらく詳細がありますが、(もちろんありますが:-))私は他の場所で実行中のコードを1つのスクリプトで作成していました。 –

+0

うーん、私は20秒待つときでも、私は警告を追加すると迅速にする必要があります。
あなたの機能に興味があります。 $ withlist配列のパラメータが$ ** 2 **あるので、シフトと$要素が何をしているのか把握しなければなりません。
私の質問の最後の部分について、その行にブラックリストに登録されたURLが1つしかない場合、どのようにURL全体を削除するのですか?再度、感謝します。 –

+0

'for element 'は、$ *のfor要素と同じで、関数やスクリプト全体で使用できます。 'shift'は$ *の最初の要素を破棄します。したがって、' foo 1 2 3'という呼出しがあれば、$ 1、$ 2、$ 3という3つのパラメータを持つ関数があります。 fooの内部を移動すると、$ 2は$ 1を取得し、$ 3は$ 2を取得します。残りのパラメータは2つだけです。関数を不明な数のparamsでコールしますが、最初のものはリストではなく、リストで検索する要素です。最初のパラメータを$キーとして保存した後、シフトは古い$ 1を削除し、ホワイトリストのURLのリストを$ *として終了します。 –

関連する問題