# Need help to manipulate data using script

**URL:** <https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150>\
**Category:** Shell Programming and Scripting\
**Created:** [November 28, 2013, 2:26pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150 "2013-11-28T14:26:13Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![nith\_anandan](https://community.unix.com/letter_avatar/nith_anandan/32/5_5575768a8748004e209b776fc1b2916d.png) [@nith\_anandan](https://community.unix.com/u/nith_anandan)\
**Post date:** [November 28, 2013, 2:26pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/1 "2013-11-28T14:26:13Z")

</div>

Hi

i want to manipulate my data to convert row to column

```nohighlight
name
600

Slno vlan
1 600
2 609
3 700

name
700

Slno vlan
1 600
2 609
3 700

```

I want to convert above file like this output

```nohighlight
Slno vlan name  
1 600 600
2 609 600
3 700 600
Slno vlan name  
1 600 700
2 609 700
3 700 700

```

Please help me to convert

Thanks in advance  
😕

---

<div class="post-metadata">

**Author:** ![Yoda](https://community.unix.com/user_avatar/community.unix.com/yoda/32/2498_2.png) [@Yoda](https://community.unix.com/u/Yoda)\
**Post date:** [November 28, 2013, 2:40pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/2 "2013-11-28T14:40:05Z")

</div>

An awk approach:

```nohighlight
awk '
        /name/ {
                print "Slno", "Name"
                f = 0
                getline
                nm = $0
        }
        /Slno vlan/ {
                f = 1
                next
        }
        f && NF {
                print $0, nm
        }

' OFS='\t' file

```

---

<div class="post-metadata">

**Author:** ![RudiC](https://community.unix.com/letter_avatar/rudic/32/5_5575768a8748004e209b776fc1b2916d.png) [@RudiC](https://community.unix.com/u/RudiC)\
**Post date:** [November 28, 2013, 2:47pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/3 "2013-11-28T14:47:04Z")

</div>

Please use code tags as required by forum rules!

Try

```nohighlight
awk '/name/ {getline name; next} NF {print $0, $1="Slno"?"name":name}' file
Slno vlan name
1 600 name
2 609 name
3 700 name
Slno vlan name
1 600 name
2 609 name
3 700 name

```

---

<div class="post-metadata">

**Author:** ![Chubler\_XL](https://community.unix.com/user_avatar/community.unix.com/chubler_xl/32/2077_2.png) [@Chubler\_XL](https://community.unix.com/u/Chubler_XL)\
**Post date:** [November 28, 2013, 4:07pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/4 "2013-11-28T16:07:44Z")

</div>

Slight change to RudiC's solution to get last "name" field printing:

```nohighlight
awk '/name/ {getline name; next} NF {print $0, $1=="Slno"?"name":name}' file
Slno vlan name
1 600 600
2 609 600
3 700 600
Slno vlan name
1 600 700
2 609 700
3 700 700

```

I tried a slightly different approach - using the blank lines as RS:

```nohighlight
awk '
  /name/ { name=$2; next }
  /Slno vlan/ {
      $1=$1" name";
      for(i=2;i<=NF;i++) $i=$i" "name
  }
  1 ' FS='\n' OFS='\n' RS= infile

```

---

<div class="post-metadata">

**Author:** ![nith\_anandan](https://community.unix.com/letter_avatar/nith_anandan/32/5_5575768a8748004e209b776fc1b2916d.png) [@nith\_anandan](https://community.unix.com/u/nith_anandan)\
**Post date:** [November 28, 2013, 10:13pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/5 "2013-11-28T22:13:06Z")

</div>

Thanks for you replay.! its very use full

I need a slight change in the output as below

input file is like this

```nohighlight
 
name1
600  

Slno vlan 
1 600
2 609
3 700 

name2 
700  

Slno vlan 
1 600 
2 609 
3 700 

```

and out put file

```nohighlight
Slno vlan name 
1 600 name1 
2 609 name1 
3 700 name1 

Slno vlan name 
1 600 name2 
2 609 name2 
3 700 name2

```

Thank you

---

<div class="post-metadata">

**Author:** ![Chubler\_XL](https://community.unix.com/user_avatar/community.unix.com/chubler_xl/32/2077_2.png) [@Chubler\_XL](https://community.unix.com/u/Chubler_XL)\
**Post date:** [November 28, 2013, 10:27pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/6 "2013-11-28T22:27:24Z")

</div>

Try these changes to my earlier posted code:

```nohighlight
awk '
  !/Slno/ {
     name=$1
     next
   }
  /Slno vlan/ {
      $1=$1" name";
      for(i=2;i<=NF;i++) $i=$i" "name
  }
  1
' FS='\n' ORS='\n\n' OFS='\n' RS= infile

```

---

<div class="post-metadata">

**Author:** ![nith\_anandan](https://community.unix.com/letter_avatar/nith_anandan/32/5_5575768a8748004e209b776fc1b2916d.png) [@nith\_anandan](https://community.unix.com/u/nith_anandan)\
**Post date:** [November 28, 2013, 10:38pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/7 "2013-11-28T22:38:18Z")

</div>

> [@chubler\_xl](#):
>
> Try these changes to my earlier posted code:
> 
> ```plaintext
> awk '
> !/Slno/ {
> name=$1
> next
> }
> /Slno vlan/ {
> $1=$1" name";
> for(i=2;i<=NF;i++) $i=$i" "name
> }
> 1
> ' FS='\n' ORS='\n\n' OFS='\n' RS= infile
> 
> ```

I am getting below output

```plaintext
awk '
  !/Slno/ {
     name=$1
     next
   }
  /Slno vlan/ {
      $1=$1" name";
      for(i=2;i<=NF;i++) $i=$i" "name
  }
  1
' FS='\n' ORS='\n\n' OFS='\n' RS= test

```

OUTPUT

```plaintext
Slno vlan  
1 600
2 609
3 700

Slno vlan  
1 600
2 609
3 700

Slno vlan  
1 600
2 609
3 700

```

Thank you..

---

<div class="post-metadata">

**Author:** ![Chubler\_XL](https://community.unix.com/user_avatar/community.unix.com/chubler_xl/32/2077_2.png) [@Chubler\_XL](https://community.unix.com/u/Chubler_XL)\
**Post date:** [November 28, 2013, 10:46pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/8 "2013-11-28T22:46:28Z")

</div>

Looks like you have some tabs in there, try:

```nohighlight
awk '
  !/Slno/ { name=$1; next}
  {
      $1=$1" name";
      for(i=2;i<=NF;i++) $i=$i" "name
  }
  1
' FS='\n' ORS='\n\n' OFS='\n' RS= infile

```

---

<div class="post-metadata">

**Author:** ![nith\_anandan](https://community.unix.com/letter_avatar/nith_anandan/32/5_5575768a8748004e209b776fc1b2916d.png) [@nith\_anandan](https://community.unix.com/u/nith_anandan)\
**Post date:** [November 28, 2013, 10:55pm UTC](https://community.unix.com/t/need-help-to-manipulate-data-using-script/337150/9 "2013-11-28T22:55:38Z")

</div>

> [@chubler\_xl](#):
>
> Looks like you have some tabs in there, try:
> 
> ```plaintext
> awk '
> !/Slno/ { name=$1; next}
> {
> $1=$1" name";
> for(i=2;i<=NF;i++) $i=$i" "name
> }
> 1
> ' FS='\n' ORS='\n\n' OFS='\n' RS= infile
> 
> ```

Its works ..! :b:Thank you ..!🆒
