in reply to Re: How to swap columns in a csv file ?
in thread How to swap columns in a csv file ?


Hello,

It works very well. Thank you very much for your help.

Next steps are :
1) to be able to manage comments in the csv file that can be split on several lines. I do it in a way I don't like using sed.
2) to be able to sort alphabetically 2 columns
I'll try first on my own before I ask your help again :)

Regards

Xuo
  • Comment on Re^2: How to swap columns in a csv file ?

Replies are listed 'Best First'.
Re^3: How to swap columns in a csv file ?
by 1nickt (Canon) on Jan 06, 2025 at 09:43 UTC

    "to be able to sort alphabetically 2 columns"

    Hi, it's not completely clear what you want. Maybe it's as simple as the following, which sorts by column 1 and if there multiple instances of a value, then by column 3. See sort.

    use strict; use warnings; use Text::CSV_XS 'csv'; my $aoa = csv( in => *DATA ); my @headers = shift @$aoa; my @sorted = sort { $a->[0] cmp $b->[0] || $a->[2] cmp $b->[2] } @$aoa +; csv( in => \@sorted, headers => @headers ); __DATA__ column1,column2,column3 b,foo,v a,bar,y c,baz,w b,qux,z b,nif,x

    Output:

    column1,column2,column3 a,bar,y b,foo,v b,nif,x b,qux,z c,baz,w

    Hope this helps.

    Update: added link to doc


    The way forward always starts with a minimal test.

      Hi,

      This is exactly what I wanted to do. I'll add it in my complete script.
      Thank you again very much for your help.

      Regards.

      Xuo.
Re^3: How to swap columns in a csv file ?
by xuo (Acolyte) on Jan 05, 2025 at 19:17 UTC

    Hi,

    Step 1 is managed by default with the code from Tux. I've removed all my dirty code.

    Xuo.

      Hi,

      Everything works fine now.
      I still have one question : how to redirect the output of the csv module :
      ex : csv (in => $aoh, headers => \@nh);
      to a file instead of stdout ?

      Regards.

      Xuo.