如果找不到,则从文件和输出模式中获取grep

时间:2015-08-18 08:46:41

标签: bash grep

我有一个文件ids_list.csv,其中包含一个ID列表,每行一个。

我还有一个日志文件,我想在ids_list.txt找到ID。

我想要的是在result.txt文件中打印日志文件中的行(如果找到了模式),或者其他模式。

所以我写了这个剧本:

#!/bin/bash

for i in `cat ids_list.csv`;
  do
    echo $i
    echo `grep $i log_FVAScope`
    if [[ ! res=$(grep $i log_FVAScope) ]]; then
      echo $i >> result.txt;
    else
      echo $res >> result.txt
    fi
  done

但是,result.txt是空的,我做错了什么?

它似乎相当慢,我怎样才能加快速度(ids_list.csv包含~40k行,日志文件包含700k行)?

编辑:示例输入:

ids_list.csv

KBKEQO17564
SPXTCT769178
KBKFXS1952894
CDNEVL_4148105
BBR10000130794156

日志文件

18:51:59.368 [pool-1-thread-4] INFO  c.s.m.x.liqor.filter.CodChainFilter - KBKEQO17564 excluded by CodeChain Filter
18:51:59.369 [pool-1-thread-5] INFO  c.s.m.x.liqor.filter.CodChainFilter - KBKFXS1952894 excluded by CodeChain Filter
18:51:59.369 [main] INFO  c.s.m.x.l.manager.FilterManagerImpl - waiting new deals to submit
18:51:59.369 [pool-1-thread-2] INFO  c.s.m.x.liqor.filter.CodChainFilter - CDNEVL_4148105 excluded by CodeChain Filter
18:51:59.369 [pool-1-thread-1] INFO  c.s.m.x.liqor.filter.CodChainFilter - BBR10000130794156 excluded by CodeChain Filter

所需的输出(result.txt

18:51:59.368 [pool-1-thread-4] INFO  c.s.m.x.liqor.filter.CodChainFilter - KBKEQO17564 excluded by CodeChain Filter
SPXTCT769178
18:51:59.369 [pool-1-thread-5] INFO  c.s.m.x.liqor.filter.CodChainFilter - KBKFXS1952894 excluded by CodeChain Filter
18:51:59.369 [main] INFO  c.s.m.x.l.manager.FilterManagerImpl - waiting new deals to submit
18:51:59.369 [pool-1-thread-2] INFO  c.s.m.x.liqor.filter.CodChainFilter - CDNEVL_4148105 excluded by CodeChain Filter
18:51:59.369 [pool-1-thread-1] INFO  c.s.m.x.liqor.filter.CodChainFilter - BBR10000130794156 excluded by CodeChain Filter

1 个答案:

答案 0 :(得分:0)

嗯,你实际上并不需要脚本。下面的命令可以满足您的需求。

while read line; do grep $line log_FVAScope >> result.txt ; done < ids_list.csv

我不知道性能问题。