起初,我对 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
一些评论,不仅涉及您最初的问题,而且希望有所帮助:
cat $2 | grep $element
是无用的管道。你可以直接执行grep $element $2
- 是否
grep $element |grep css
有意义取决于和是否$element
以css
固定顺序出现在行中。在这种情况下,最好将它们组合成类似"$element.*css"
或相反的形式 grep css | wc -l
可以替换为grep -c css
(grep -c
返回匹配的行数)- 看看你的引用:
':'"$element"': a '"$actual_count"''
由五个元素组成,并带有可变的引用(最后一个为空!)。你可以将所有内容放在双引号中以达到相同的效果:":$element: a $actual_count"
- 你希望
sed
脚本做什么?我们来看看扩展后的脚本::this/is/the/first.html: a 2
应该做什么?它只是一个标签(跳转标记),什么也不做。但实际上我认为sed
这里没有必要。
为了获得给定的输出,循环的内部部分只需要输出$element
并在下一行中输出匹配的行数:
echo $element
echo $(grep -c "$element.*css" $2)