Как вставить значение после совпадения в цикле

Во-первых, я довольно новичок в скрипте bash.

Итак, у меня есть 2 файла, давайте назовем их A и B.

В A есть URL-адреса, а в B несколько журналов. Что я хочу, так это вставлять $ actual_count после каждого вхождения $ element

Для 1 $ element есть только 1 $ actual_count

IFS=',' read -r -a array < $1
for element in "${array[@]}"
do
        actual_count=`cat $2 | grep $element |grep css | wc -l`
        sed -i ':'"$element"': a '"$actual_count"'' daily_output
done

, этот код возвращает меня после найденного $ element [ 115]

все $ actual_count этого цикла возводятся в квадрат и умножаются на все элементы массива.

Like (все $ actual_count, сгенерированные в этом цикле) ² * sizeof array. (Это много).

Я не знаю, где я все испортил.

Я надеюсь, что вы можете мне помочь.

Извините за мой плохой английский xD

С уважением, fune

Редактировать: если я использую фиксированный шаблон поиска, то он работает нормально.

0
задан 7 May 2019 в 16:37

1 ответ

Некоторые замечания, не только касающиеся вашего первоначального вопроса, но, надеюсь, полезные:

  1. cat $2 | grep $element - бесполезная труба. Вы можете указать grep $element $2
  2. , имеет ли смысл grep $element |grep css, решать, появляются ли $element и css в фиксированном порядке в строке. В этом случае было бы лучше объединить их в нечто вроде "$element.*css" или наоборот
  3. grep css | wc -l можно заменить на grep -c css (grep -c возвращает количество совпадающих строк)
  4. Посмотрите на ваше цитирование: ':'"$element"': a '"$actual_count"'' состоит из пяти элементов с изменяющим цитированием (последний из которых пустой!). Вы можете сложить все в двойные кавычки, чтобы достичь того же: ":$element: a $actual_count"
  5. Что вы ожидаете от сценария sed? Давайте посмотрим на скрипт после расширения: :this/is/the/first.html: a 2 должен делать что? Это просто метка (метка прыжка) и ничего не делает. Но на самом деле я не вижу необходимости в sed здесь.

Чтобы получить заданный вывод, внутренней части цикла просто нужно вывести $element и в следующей строке количество совпадающих строк:

    echo $element
    echo $(grep -c "$element.*css" $2)
0
ответ дан 7 May 2019 в 16:37

Другие вопросы по тегам:

Похожие вопросы: