在unix中的日志文件中搜索id列表

时间:2015-02-23 09:16:03

标签: unix awk grep

很抱歉问这个,可能是一个微不足道的问题,也尝试过awk脚本。但我认为我是新手。

我在文件中有一个ID列表,即ids.txt

1xre23
223dsf
234ewe

和包含可能包含这些ID的FIX消息的日志文件 示例:日志文件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

我想检查该日志文件中匹配的ID数量。 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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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的数据 如果是,请打印该行。