Shell grep另一个文件中某个文件的每一行
我必须从一个文件中每行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
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