Получить список URL из файла и создать нумерованный массив - PullRequest
1 голос
/ 20 марта 2012

В настоящее время я использую следующее для удаления определенных URL-адресов из файла:

sed -e 's!\http\(s\)\{0,1\}://Goog.le[^[:space:]]*!!g' newfile

Но из-за все большего количества спама (я получаю больше спам-URL, чем реальных URL-адресов), мне нужно добавить дополнительные правила.1004 *

Я хочу получить список URL-адресов из файла fileA, поместить их в массив arrayB и затем отобразить URL-адреса с indexB для пользователя.

Затем явведет номер URL indexB для URL, которые не должны быть удалены.С этими числами, отсортированными от высокого к низкому, я иду по arrayB, удаляя соответствующие номера индексов, начиная с самого высокого индекса.На данный момент мой массив содержит только те URL-адреса, которые должны быть удалены со страницы fileA.

Затем я снова пройдусь по fileA, и когда найду URL-адрес на странице и в массиве,Я удалю этот URL из этого fileA в fileB.

Теперь моя главная задача - как сравнить arrayB с fileA и удалить URL-адреса в fileA, которые находятся в arrayB и, когда URL на странице находится в одной строке, удалите все строки вместе.

Предупреждение, иногда в одной строке есть хороший и один или несколько плохих URL, и вы не знаете, как это сделать.справиться с этим.

1 Ответ

1 голос
/ 20 марта 2012

Проблема с вашим описанием состоит в том, что вы объясняете много деталей о вашем подходе (начиная с самого высокого индекса) без объяснения причин.Это выглядит слишком конкретным для меня.Порядок не очень важен.

Итак, здесь другой подход:

#!/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 работает с индексом.

Я не знаю, как вы автоматически получаете URL из файла A.Независимо от того, хотите ли вы сохранить выбор для последующего использования (файл B).

...