2015-08-18 41 views
0

我有一個文件,ids_list.csv,包含一個id列表,每行一個。如果找不到文件和輸出模式的grep

我也有一個日誌文件,其中我想從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 
+0

Wrt速度,請改用awk。 – 123

+0

一些樣本輸入和預期輸出會更有幫助。 – serenesat

+0

用於逐行讀取文件,更好地使用'read line;做...;完成 Fiximan

回答

0

那麼,你實際上並不需要腳本。在命令下面做你想做的事。

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

雖然我不知道性能問題。