這樣就沒辦法那麼少行啦...
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***