James Edward Gray II wrote:
> 
> On Saturday, October 5, 2002, at 06:02  PM, Paul Van Dalen wrote:
> >
> > Given this input:
> >
> > 222    xxx    JJJJJ
> > 222    www    DD
> > 222    cc    ffFFF
> > 909    eee    EEEE
> > 909    FFF    kkkk
> > 909    jjjjj    KKKK
> > 888    JJJ    HHHH
> > 888    HHH    JJJJ
> >
> > I'd like to split the input, group it by the first column, and, for that
> > group, print out a concatenated second column.  The output should look
> > thusly:
> >
> > 222    xxx;www;cc
> > 909    eee;FFF;jjjjj
> > 888    JJJ;HHH
> 
> perl -pe 's/^(\d+\s+)([a-zA-Z]+)\s+([a-zA-Z]+)$/$1$2;$3/' infile >outfile

$ perl -pe 's/^(\d+\s+)([a-zA-Z]+)\s+([a-zA-Z]+)$/$1$2;$3/' infile
222    xxx;JJJJJ
222    www;DD
222    cc;ffFFF
909    eee;EEEE
909    FFF;kkkk
909    jjjjj;KKKK
888    JJJ;HHHH
888    HHH;JJJJ


This _will_ work:   :-)

$ perl -ane'                                        
BEGIN{$prev = ""} END{print "@$_\n" for @data}                                         
        
if ($prev eq $F[0]) {$data[-1][1] .= ";$F[1]"}
else {$prev = $F[0], push @data, [@F[0,1]]}'  infile
222 xxx;www;cc
909 eee;FFF;jjjjj
888 JJJ;HHH


And if you don't care what order the records are output.

$ perl -lane'push@{$d{$F[0]}},$F[1]}{print"$_ ",join";",@{$d{$_}}for keys%d' infile
222 xxx;www;cc
909 eee;FFF;jjjjj
888 JJJ;HHH



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to