如何在循环内匹配后插入值

如何在循环内匹配后插入值

起初,我对 Bash 脚本还很陌生。

所以我有 2 个文件,我们将它们称为 A 和 B。

A 中是 URL,B 中是几条日志。我想要的是,在每次出现 $element 后插入一个 $actual_count

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 后返回我

将此循环的所有 $actual_count 平方并与数组的所有元素相乘。

像(此循环中生成的所有 $actual_count)²*sizeof 数组。(那很多)。

我不知道我到底哪里把事情搞得这么糟了。

我希望你可以帮助我。

抱歉我的英文不好 xD

亲切的问候 fune

编辑:如果我使用固定的搜索模式,那么它可以正常工作。

编辑2:感谢您的回答!

这是数组的文件:

this/is/the/first.html,this/is/the/sec.html,this/is/the/third.html,this/is/the/forth.html,this/is/the/fifth.html,an/so/on.html

actual_count 文件是 apache-access 日志文件。

我想要的结果如下:

this/is/the/first.html
2
this/is/the/sec.html
3
this/is/the/third.html
0
this/is/the/forth.html
1
...

答案1

一些评论,不仅涉及您最初的问题,而且希望有所帮助:

  1. cat $2 | grep $element是无用的管道。你可以直接执行grep $element $2
  2. 是否grep $element |grep css有意义取决于和是否$elementcss固定顺序出现在行中。在这种情况下,最好将它们组合成类似"$element.*css"或相反的形式
  3. grep css | wc -l可以替换为grep -c cssgrep -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)

相关内容