Rohit Sachan
Rohit Sachan

Reputation: 1222

Search list of ids in a log file in unix

Sorry to ask this, might be a trivial question, tried awk script as well. But I think I am new to that.

I have a list of Ids in a file i.e. ids.txt

1xre23
223dsf
234ewe

and a log file with FIX messages which might contain those ids.
sample: log file 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

I want to check how many ids matched in that log file. Ids are large almost 10K, and log file size is around 300MB. sample output I am looking for is.

output:

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

Upvotes: 0

Views: 594

Answers (2)

Jotne
Jotne

Reputation: 41460

If you like to use awk this should do:

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

This store the ids.txt in array a
If fourth field (separated by = and ^) contains the ID, print it.


You can also do it the other way around:

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

Store all data from abc.log in array a
Then test if line contains data for id.txt
If yes, print the line.

Upvotes: 1

SMA
SMA

Reputation: 37073

Try something like with grep command:

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>

Upvotes: 1

Related Questions