# split for data manitpulation

**URL:** <https://forum.ansible.com/t/split-for-data-manitpulation/38385>\
**Category:** Ansible Project\
**Created:** [August 29, 2023, 7:40am UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385 "2023-08-29T07:40:42Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Veera](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/veera/32/4107_2.png) [@Veera](https://forum.ansible.com/u/Veera)\
**Post date:** [August 29, 2023, 7:40am UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/1 "2023-08-29T07:40:42Z")

</div>

Hi,

I have this playbook to print the columns 5 and 6 using the debug.

---

<div class="post-metadata">

**Author:** ![dulhaver](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/dulhaver/32/1061_2.png) [@dulhaver](https://forum.ansible.com/u/dulhaver)\
**Post date:** [August 29, 2023, 9:21am UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/2 "2023-08-29T09:21:56Z")

</div>

> Do split accepts only one square bracket parameter?

the python aquivalent (something similar to this should be happening in the backgound) would be:

> > > myline = ‘This line is a test, two, three, four, five, 6, seven’  
> > > print(myline.split(‘,’)[4], myline.split(‘,’)[5], myline.split(‘,’)[6])  
> > > five 6 seven

as you do not have an index 11 your concrete example makes no big sense in that regards.

I neither found the correct ansible syntax to translate that mentioned python logic into a TASK example like yours though.  
maybe someone else here can help out with that

---

<div class="post-metadata">

**Author:** ![utoddl](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/utoddl/32/249_2.png) [@utoddl](https://forum.ansible.com/u/utoddl)\
**Post date:** [August 29, 2023, 11:53am UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/3 "2023-08-29T11:53:47Z")

</div>

You have 6 delimiters, so only 7 fields. Your maximum index therefore is 6.

Setting that issue aside, you can use map(), like so:

```auto
    "{{ [2, 4, 5] | map('extract', myline.split(',')) }}"

```

Cheers,

---

<div class="post-metadata">

**Author:** ![Veera](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/veera/32/4107_2.png) [@Veera](https://forum.ansible.com/u/Veera)\
**Post date:** [August 29, 2023, 3:45pm UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/4 "2023-08-29T15:45:51Z")

</div>

Thanks Todd.  
I got the desired output and it answers the other thread also .  
[https://groups.google.com/g/ansible-project/c/ZqZuw3do-5g/m/hMlDvLceAQAJ](https://groups.google.com/g/ansible-project/c/ZqZuw3do-5g/m/hMlDvLceAQAJ) (Now I understand it is a string… )

---

<div class="post-metadata">

**Author:** ![Veera](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/veera/32/4107_2.png) [@Veera](https://forum.ansible.com/u/Veera)\
**Post date:** [October 14, 2023, 5:32pm UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/5 "2023-10-14T17:32:51Z")

</div>

Hi Todd,

Is there a way to combine the 2 positional values .

“{{ [2, 4, 5] | map(‘extract’, myline.split(‘,’)) }}”

as  
“{{ [2, 4 5] | map(‘extract’, myline.split(‘,’)) }}”  
to print like below

- two
- four five

I tried to combine … but missing a bit  
“{{ [2, combine [4 5] | map(‘extract’, myline.split(‘,’)) }}” or printing “two” as a item and “{{ [4 5] | map(‘extract’, myline.split(‘,’)) |combine }}”

or a different filter instead of combine can help?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [October 14, 2023, 7:38pm UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/6 "2023-10-14T19:38:15Z")

</div>

Split the string and trim the items

&nbsp;&nbsp;arr: "{{ myline|split(',')|map('trim') }}"

gives

&nbsp;&nbsp;arr:  
&nbsp;&nbsp;- This line is a test  
&nbsp;&nbsp;- two  
&nbsp;&nbsp;- three  
&nbsp;&nbsp;- four  
&nbsp;&nbsp;- five  
&nbsp;&nbsp;- '6'  
&nbsp;&nbsp;- seven

A list of lists the structure that describes what you want

&nbsp;&nbsp;s1\_34: "{{ [[1], [3, 4]]|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map('map', 'extract', arr)|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map('join', ' ') }}"

gives

&nbsp;&nbsp;s1\_34:  
&nbsp;&nbsp;- two  
&nbsp;&nbsp;- four five

You can substitute \*arr\* in \*s1\_34\* if you want a 'one-liner'.

---

<div class="post-metadata">

**Author:** ![Veera](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/veera/32/4107_2.png) [@Veera](https://forum.ansible.com/u/Veera)\
**Post date:** [October 16, 2023, 5:29am UTC](https://forum.ansible.com/t/split-for-data-manitpulation/38385/7 "2023-10-16T05:29:31Z")

</div>

Hi Vladimir ,

I got it by using the join - s1\_34: "{{ [[1], [3, 4]]| map(‘map’, ‘extract’, arr)| join(‘,’)}
