这样就没办法那么少行啦...
my @a = split /\*/;
my $id = shift @a;
$a[0] =~ s/(\d+)/A$1/g;
$a[1] =~ s/(\d+)/B$1/g;
@a = grep {/\S/} map {split /,/} @a;
@a ? map {print "$id $_\n"} sort {substr($a,1)<=>substr($b,1)} @a
: print "$id\n";
看有没有人有兴趣弄出更少行的 XD
※ 引述《yalent ( 心只有妳 )》之铭言:
: 非常感谢您的回答~
: 目前又遇到一个问题,在原始档的*之中,
: 都会有一组数字如下的1,2,3等
: ID2*1,2,4*2,3,4*
: ID3**2*
: ID4***
: 但是我想将第一组数字1转成 A1,2转成 A2,4转成 A4
: 至于第二组数字的2 转成B2,3转成 B3,4转成 B4
: 之后再对内容作排序
: 想将内容转为
: ID2 A1
: ID2 A2
: ID2 B2
: ID2 B3
: ID2 A4
: ID2 B4
: ID3 B2
: ID4
: 那这部份取代的写法,我要怎么写呢?
: ※ 引述《AntaresStar ()》之铭言:
: : 虽然好像是以*为分隔 但切开后又要排序
: : 那不如连逗点也一起拿来切了
: : 这样如何
: : #!/usr/bin/perl
: : while (<DATA>) {
: : my @a = grep {/\S/} split /[,*]/;
: : my $b = shift @a;
: : @a ? map {print "$b $_\n"} sort @a : print "$b\n";
: : }
: : __DATA__
: : ID2*1,2,4*2,3,4*
: : ID3**2*
: : ID4***