1

csvファイルの行をマージするコードを書くのを手伝ってください。私のcsvファイルは以下のとおりです。

出力.csv

abc、1、2、3、4、5
abc,3,5,60,3
abc、4、5、6
def,2,5,6,7
def,3,4,5,6

これはほんの一例です。私のcsvファイルのデータは毎回変化し続けます。したがって、abc (3 行) または def (2 行) に限定されません。私のcsvファイルが以下に示すように表示されるようにコードを配置するのを手伝ってください:

出力.csv

abc,1,2,3,4,5,3,5,60,3,4,5,6
def,2,5,6,7,3,4,5,6

Text::CSV を使って csv を読み込んで、ハッシュしてみました。しかし、配列をハッシュに変換しようとしたときに行き詰まりました。ここで少し混乱しています。助けてください。

4

3 に答える 3

4

最初のフィールドにコンマが含まれていないと仮定します。

perl -nle '
    ($key,$vals) = /^([^,]+),(.*)/;
    push @{$final_lines{$key}},$vals;
    END{
        for $key (sort keys %final_lines){
            print join ",",$key,@{$final_lines{$key}}
        }
    }
' < input_file > output_file
于 2013-11-07T21:31:01.250 に答える
2
#!/usr/bin/perl
use strict;
use warnings;

my %hash;

open my $ifh, '<', 'input.csv' or die $!;
open my $ofh, '>', 'output.csv' or die $!;

while (<$ifh>) {
  chomp;
  my @F = split /,/;
  my $key = shift @F;
  push @{$hash{$key}}, @F;
}

foreach (sort keys %hash) {
  print $ofh "$_," . join (',', @{$hash{$_}}) . "\n";
}

close $ifh;
close $ofh;
于 2013-11-07T21:31:48.850 に答える