2015-02-23 68 views
0

不好意思問這個,可能是一個小問題,也嘗試過awk腳本。但我認爲我是新手。
unix中的日誌文件中的ids搜索列表

我有一個文件,即ids.txt

1xre23 
223dsf 
234ewe 

,並可能包含這些ID FIX消息的日誌文件ID的列表。
示例:日誌文件abc.log

35=D^A54=1xre23^A22=s^A120=GBP^A 
35=D^A54=abcd23^A22=s^A120=GBP^A 
35=D^A54=234ewe^A22=s^A120=GBP^A 
35=D^A54=xyzw23^A22=s^A120=GBP^A 
35=D^A54=223dsf^A22=s^A120=GBP^A 

我要檢查有多少在日誌文件中匹配的IDS。 Ids很大,幾乎爲10K,日誌文件大小約爲300MB。我正在尋找的示例輸出是 。

輸出:

35=D^A54=1xre23^A22=s^A120=GBP^A 
35=D^A54=234ewe^A22=s^A120=GBP^A 
35=D^A54=223dsf^A22=s^A120=GBP^A 

回答

1

嘗試像使用grep命令:

grep -w -f ids.txt abc.log 
Output: 
35=D^A54=1xre23^A22=s^A120=GBP^A<br> 
35=D^A54=234ewe^A22=s^A120=GBP^A<br> 
35=D^A54=223dsf^A22=s^A120=GBP^A<br> 
0

如果你喜歡用awk這應該這樣做:

awk -F"[=^]" 'FNR==NR {a[$0];next} $4 in a' ids.txt abc.log 
35=D^A54=1xre23^A22=s^A120=GBP^A 
35=D^A54=234ewe^A22=s^A120=GBP^A 
35=D^A54=223dsf^A22=s^A120=GBP^A 

本店ids.txt數組a
如果第四個字段(由=^分隔)包含該ID,則將其打印出來。


你也可以做它周圍的其他方法:

awk 'FNR==NR {a[$0];next} {for (i in a) if ($0~i) print}' abc.log ids.txt 
35=D^A54=1xre23^A22=s^A120=GBP^A 
35=D^A54=234ewe^A22=s^A120=GBP^A 
35=D^A54=223dsf^A22=s^A120=GBP^A 

存儲所有從abc.log數據陣列a
然後測試,如果行包含數據id.txt
如果是的話,打印線。