我必须从文件中每一行grep一行并计算另一个文件中的出现次数。两个模板文件的内容是:
template_service:
CO_SERVICE_SVCID268435463;Main Service
CO_FT_NON_BESTOWED_SVCID268435464;Bestowed Service
CO_SFT_NON_BESTOWED_SVCID268435465;Non Bestowed Service
template1(由第一个文件本身组成):
CO_SERVICE_SVCID268435463
CO_FT_NON_BESTOWED_SVCID268435464
CO_SFT_NON_BESTOWED_SVCID268435465
包含搜索字符串(即每个不同的行)。 还有另一个包含1,00,000多行的文件(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中文件1中每一行的出现次数,并将结果打印在final_count.txt中 这将输出显示为:
60000
120000
180000
但输出应该是:
60000
60000
60000
为什么还要添加前一笔金额?
答案 0 :(得分:2)
为什么还要添加前一笔金额?
因此:
echo "$line" | cut -d';' -f1 >>template1.txt
将其更改为:
echo "$line" | cut -d';' -f1 >template1.txt
应该解决问题。使用>>
会将行追加到文件中,从而导致先前的计数被添加到结果中。
答案 1 :(得分:1)
您始终附加到templateX.txt
个文件(使用>>
)。
因此,第二次调用grep时,它使用template_service.txt中的前两行,并且第三次使用所有三行。
而是尝试使用>
来编写templateX.txt
个文件。