title: How can I modify fields in a CSV file with Perl?
body: <p>I have a csv file with following sample data.</p>
  
  <pre><code>o-option(alphabetical)
  v-value(numerical)
  
  number1,o1,v1,o2,v2,o3,v3,o4,v4,o5,v5,o6,v6
  number2,o1,v11,o2,v22,o3,v33,o44,v44,o5,v55,o6,v66
  
  and so on....
  </code></pre>
  
  <p>Required output.</p>
  
  <pre><code>NUM,o1,o2,o3,o4,o44,o5,o6
  number1,v1,v2,v3,v4,,v5,v6
  number2,v11,v22,v33,,v44,v55,v66
  
  and so on...
  </code></pre>
  
  <p>In this data, all the options are same i.e. o1,o2,etc through out the file but option 4 value is changing, i.e. o4,o44, etc. In total there are about 9 different option values at o4 field. Can anyone please help me with the perl code to get the required output.</p>
  
  <p>I have written the below code but still not getting the required output.</p>
  
  <pre><code>my @values;
  my @options;
  my %hash;
  
  while (&lt;STDIN&gt;) {
  chomp;
  my ($srn,$o1,$v1,$o2,$v2,$o3,$v3,$o4,$v4,$o5,$v5,$o6,$v6) = split /[,\n]/, $_;
  push @values, [$srn,$v1,$v2,$v3,$v4,$v5,$v6];
  push @options, $o1,$o2,$o3,$o4,$o5,$o6;
  }
  
  #printing the header values
  my @out = grep(!$hash{$_}++,@options);
  print 'ID,', join(',', sort @out), "\n";
  
  #printing the values.
  for my $i ( 0 .. $#values) {
          print @{$values[$i]}, "\n";
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>ID,o1,o2,o3,o4,o44,o5,o6
  number1,v1,v2,v3,v4,v5,v6
  number2,v1,v2,v3,v44,v5,v6
  </code></pre>
  
  <p>As from the above output, when the value 44 comes, it comes under option4 and hence the other values are shifting to left. The values are not mapping with the options. Please suggest.</p>