grep来自另一个文件中的文件的每一行

时间:2013-09-23 12:55:32

标签: shell grep

我必须从文件中每一行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

为什么还要添加前一笔金额?

2 个答案:

答案 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个文件。