很抱歉问这个,可能是一个微不足道的问题,也尝试过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
答案 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
的数据
如果是,请打印该行。