Splunk Search

Why when using "map" command, if I use the string argument with "map", results are not displayed?

yutaka1005
Builder

Splunk ver : 7.1.2

When I use the map command, if argument that pass to map is string, results are never displayed.
But, if argument is int or string that contains space, then it works!

Below search is examples.
* Since it is a sample, it is weird search, but please do not mind.

Not working case:

| makeresults count=3 
| eval field1="test"
| table field1 
| map search="| stats count | fields - count | eval map_field1=$field1$ | table map_field1"

Working case1:

| makeresults count=3 
| eval field1=111    
| table field1 
| map search="| stats count | fields - count | eval map_field1=$field1$ | table map_field1"

Working case2:

| makeresults count=3 
| eval field1="this is test"  
| table field1 
| map search="| stats count | fields - count | eval map_field1=$field1$ | table map_field1"

Is this specification, or issue?
*if it is, I'm so sorry.

Please someone tell me.

0 Karma
1 Solution

harishalipaka
Motivator

hi @yutaka1005

try like this

| makeresults count=3 
 | eval field1=111
 | table field1 
 | map [search | stats count | fields - count | eval map_field1="$field1$" | table map_field1]
Thanks
Harish

View solution in original post

harishalipaka
Motivator

hi @yutaka1005

try like this

| makeresults count=3 
 | eval field1=111
 | table field1 
 | map [search | stats count | fields - count | eval map_field1="$field1$" | table map_field1]
Thanks
Harish

yutaka1005
Builder

Thank you for answer!

Problem was solved by doing like you taught me.

But I wonder why I can't pass a string to map unless I surround argument with double quote.
Also I wonder why I can pass string that has space.

0 Karma

MuS
Legend

Hi yutaka1005,

you are using an eval and using field vs "field" is not the same 😉

  • using field in an eval will tell Splunk to use the values of the field field
  • using "field" in an eval will tell Splunk to use the string field

As example:

 | eval bar="111" | eval foo=bar

this will result in foo="111", whereas

 | eval bar="111" | eval foo="bar"

will result in foo="bar".

Hope this explains the problem you encountered.

cheers, MuS

0 Karma

yutaka1005
Builder

Thank you for comment.

So, you means below, right?

If I pass int to map

| eval bar=111 | map [ | eval foo=$bar$ ]

Although 111 is passed to map without double quote, int is defined as value(*not as field), so result is foo=111.

If I pass string to map

| eval bar="test" | map [ | eval foo=$bar$ ]

Because string without double quote is defined as field, so result is foo=test.
Then there is not test field, so result is never displayed.

Therefore, I should surround argument in map with double quote.
I was able to accept until here.

But I wonder why it working when using pass string that has space without double quote.

Such case like below, although argument in map is not surrounded with double quote, result is foo="this is test".

| eval bar="this is test" | map [ | eval foo=$bar$ ]
0 Karma

MuS
Legend

I might misunderstood your question, but have a go with this run everywhere search:

| makeresults count=3 
| eval field1="test with space", bar="baz", field2=bar, field3=123
| map search="| stats count | fields - count | eval map_field1=\"$field1$\",map_field2=\"$field2$\",map_field3=\"$field3$\",map_bar=\"$bar$\" "

This might answer and/or clarify the issue. I reckon the important thing is to have the token field in the map search like this \"$name$\"

cheers, MuS

Get Updates on the Splunk Community!

Splunk Custom Visualizations App End of Life

The Splunk Custom Visualizations apps End of Life for SimpleXML will reach end of support on Dec 21, 2024, ...

Introducing Splunk Enterprise 9.2

WATCH HERE! Watch this Tech Talk to learn about the latest features and enhancements shipped in the new Splunk ...

Adoption of RUM and APM at Splunk

    Unleash the power of Splunk Observability   Watch Now In this can't miss Tech Talk! The Splunk Growth ...