Need help to manipulate data using script

Hi

i want to manipulate my data to convert row to column

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

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
:confused:

An awk approach:

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

' OFS='\t' file

Please use code tags as required by forum rules!

Try

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
1 Like

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

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:

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
1 Like

Thanks for you replay.! its very use full

I need a slight change in the output as below

input file is like this

 
name1
600  

Slno    vlan 
1        600
2        609
3        700 

name2 
700  

Slno    vlan 
1        600 
2        609 
3        700 

and out put file

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

Try these changes to my earlier posted code:

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

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

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..

Looks like you have some tabs in there, try:

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
1 Like

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