Splunk Search

Lookup search query field comparison and output

pm2012
Explorer

Hi Team,

I would like to achieve something similar to below

1- I have a csv lookup table name - customer-devices.csv having below two columns 

hostnameDeviceType
hostname1Cisco
hostname2Cisco
hostname3Cisco

 

2- I am searching events having above hostname field for past 24 hr. My requirement it should print all hostnames in the output result which are there in the lookup and if those hostname are also in the search mark them Active if those are not there in search mark them Not Active.

Like it print all three hostname which is there in lookup having status Active and Non Active basis on its availablility in the search log

 

hostnameDeviceTypeStatus
hostname1CiscoActive
hostname2CiscoActive
hostname3CiscoNot Active
Tags (1)
0 Karma
1 Solution

gcusello
SplunkTrust
SplunkTrust

Hi @pm2012 ,

I suppose that you have the hostname field also in the main search, if not, you have to renabme that field.

So if you want only the logs from hostnames that are in the lookup, you could try somethng like this:

<your_search> [ | inputlookup customer_devices.csv | fields hostname ]
| eval hostname=lower(hostname)
| stats count BY hostname
| append [ | inputlookup customer_devices.csv | eval hostname=lower(hostname), count=0 | fields hostname DeviceType count ]
| stats sum(count) AS total values(DeviceType) AS DeviceType BY hostname
| eval Status=if(total=0, "Non Active", "Active)

 If instead you want to check also new hostnames that aren't in the lookup, you could try:

<your_search>
| eval hostname=lower(hostname)
| stats count BY hostname
| append [ | inputlookup customer_devices.csv | eval hostname=lower(hostname), count=0 | fields hostname DeviceType count ]
| stats sum(count) AS total values(DeviceType) AS DeviceType BY hostname
| eval Status=case(NOT DeviceType=*, "New hostname", total=0, "Non Active", total>0, "Active)

Ciao.

Giuseppe

View solution in original post

gcusello
SplunkTrust
SplunkTrust

Hi @pm2012 ,

I suppose that you have the hostname field also in the main search, if not, you have to renabme that field.

So if you want only the logs from hostnames that are in the lookup, you could try somethng like this:

<your_search> [ | inputlookup customer_devices.csv | fields hostname ]
| eval hostname=lower(hostname)
| stats count BY hostname
| append [ | inputlookup customer_devices.csv | eval hostname=lower(hostname), count=0 | fields hostname DeviceType count ]
| stats sum(count) AS total values(DeviceType) AS DeviceType BY hostname
| eval Status=if(total=0, "Non Active", "Active)

 If instead you want to check also new hostnames that aren't in the lookup, you could try:

<your_search>
| eval hostname=lower(hostname)
| stats count BY hostname
| append [ | inputlookup customer_devices.csv | eval hostname=lower(hostname), count=0 | fields hostname DeviceType count ]
| stats sum(count) AS total values(DeviceType) AS DeviceType BY hostname
| eval Status=case(NOT DeviceType=*, "New hostname", total=0, "Non Active", total>0, "Active)

Ciao.

Giuseppe

Get Updates on the Splunk Community!

.conf25 Community Recap

Hello Splunkers, And just like that, .conf25 is in the books! What an incredible few days — full of learning, ...

Splunk App Developers | .conf25 Recap & What’s Next

If you stopped by the Builder Bar at .conf25 this year, thank you! The retro tech beer garden vibes were ...

Congratulations to the 2025-2026 SplunkTrust!

Hello, Splunk Community! We are beyond thrilled to announce our newest group of SplunkTrust members!  The ...