简体   繁体   中英

How can I combine rows in a CSV?

I have a CSV file with three comma-delimited fields that looks like this:

THIS_IS_A_RECORD,email1domain.com;,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
ANOTHER_RECORD,email1domain.com;,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;
,,email@domain.com;

I would like to merge the rows so my output looks like this:

THIS_IS_A_FIELD,email1domain.com;,email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;
ANOTHER_FIELD,email1domain.com;,email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;email@domain.com;

The third field from the ,,email@domain.com; rows should be appended to the end of the last complete record. My goal is to import the output into a MySQL database.

Given your dataset, the following will do what you want:

perl -pe 'chomp; print "\n" if /^[^,]/ && $. > 1; s/,//g if /^,/' inFile > outFile

Hope this helps!

awk -F, '
    length($1) {if (line) print line; line=""} 
    {line = line $0}
    END {if (line) print line}
' file

You may like this solution. It assumes nothing about which columns (after the first) contain email addresses.

use strict;
use warnings;

my %data;
my @labels;

while (<>) {
  chomp;
  my ($label, @emails) = split /,/;
  @emails = grep $_, @emails;
  push @labels, $label if $label;
  push @{ $data{ $labels[-1] } }, @emails if @labels;
}

print join(',', $_, @{ $data{$_} }), "\n" for @labels;

output

THIS_IS_A_RECORD,email1domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;
ANOTHER_RECORD,email1domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;,email@domain.com;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM