Shell grep另一个文件中某个文件的每一行

Shell grep另一个文件中某个文件的每一行,shell,grep,Shell,Grep,我必须从一个文件中每行grep一次,并计算另一个文件中的发生次数。两个模板文件的内容是: 模板服务: CO_SERVICE_SVCID268435463;Main Service CO_FT_NON_BESTOWED_SVCID268435464;Bestowed Service CO_SFT_NON_BESTOWED_SVCID268435465;Non Bestowed Service template1(由第一个文件本身组成): 其中包含搜索字符串(即每个不同的行)。 还有另一个文件(t

我必须从一个文件中每行grep一次,并计算另一个文件中的发生次数。两个模板文件的内容是:

模板服务:

CO_SERVICE_SVCID268435463;Main Service
CO_FT_NON_BESTOWED_SVCID268435464;Bestowed Service
CO_SFT_NON_BESTOWED_SVCID268435465;Non Bestowed Service
template1(由第一个文件本身组成):

其中包含搜索字符串(即每个不同的行)。 还有另一个文件(text3.txt),包含100000多行,其中包含上述三个字符串中的任何一个(template_服务的内容也可能不同,它不是固定的)

这是我写的代码:

file="/somepath/etc/template_service.txt"

while IFS= read -r line
do

                echo "$line" | cut -d';' -f1 >>template1.txt
                echo "$line" | cut -d';' -f2 >>template2.txt
                grep -c -f template1.txt text3.txt >>final_count.txt  <--problematic statement showing incorrect count

done <"$file"
但结果应该是:

60000
60000
60000
为什么还要加上以前的总数呢

为什么还要加上以前的总数呢

因此:

echo "$line" | cut -d';' -f1 >>template1.txt
将其更改为:

echo "$line" | cut -d';' -f1 >template1.txt

应该解决这个问题。使用
>
会将该行追加到文件中,从而将以前的计数添加到结果中。

您总是将该行追加到
templateX.txt
文件中(您使用
>

因此,第二次调用grep时,它使用template_service.txt中的前两行,第三次使用所有三行


相反,请尝试使用
编写
templateX.txt
文件。

您误解了我的问题……echo“$line”| cut-d”中没有问题-f1>>template1.txt行..问题在于grep-c-f template1.txt text3.txt>>final_count.txt中显示了错误的输出..@subodh1989我不这么认为。问题是,在阅读
template_service.txt
时,您会继续附加到目前为止阅读的内容。因此
grep-f
将匹配先前添加的+新添加的模式。
echo "$line" | cut -d';' -f1 >>template1.txt
echo "$line" | cut -d';' -f1 >template1.txt