我必须从一个文件中grep每一行并计算另一个文件中的出现次数。两个模板文件的内容是:从另一个文件中的文件中grep每行
template_service:
CO_SERVICE_SVCID268435463;Main Service
CO_FT_NON_BESTOWED_SVCID268435464;Bestowed Service
CO_SFT_NON_BESTOWED_SVCID268435465;Non Bestowed Service
模板1(做出来的第一个文件本身):
CO_SERVICE_SVCID268435463
CO_FT_NON_BESTOWED_SVCID268435464
CO_SFT_NON_BESTOWED_SVCID268435465
其中包含搜索字符串(即每个不同的线路)。 ,还有另一个文件(text3.txt),其中包含上述三个字符串中的任意一个(其中template_service的内容也可能有所不同,但不是固定的)。
这是我所编写的代码:
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"
这应该在text3.txt计数每一行的次数从文件中的一个,并在final_count.txt 这被示出作为输出打印结果:
60000
120000
180000
但输出应该是:
60000
60000
60000
为什么它还添加了以前的总和?
您误解了我的问题...... echo“$ line”中没有问题|砍掉-d';' -f1 >> template1.txt行..问题出在grep -c -f template1.txt text3.txt >> final_count.txt显示错误的输出.. – subodh1989
@ subodh1989我不这么认为。问题是,在阅读'template_service.txt'时,你会继续追加到目前为止已读过的内容。所以'grep -f'会匹配之前添加的+新添加的模式。 – devnull
谢谢,你是对的! – subodh1989