Yささんのawkスクリプトを理解するために、perlに移植してみました。ご参考まで。
utf8で保存して試してください。
-----^
use utf8;
use Encode;
@tbl = split(",","い,ろ,は,に,ほ,へ,と,ち,り,ぬ,る,を,わ,か,よ,た,れ,そ,つ,ね,な,ら,む,う,ゐ,の,お,く,や,ま,け,ふ,こ,え,て,あ,さ,き,ゆ,め,み,し,ゑ,ひ,も,せ,す,ん");
foreach (@tbl){
$char{$_} = $i++;
}
while(<DATA>){
chomp;
@chars = split(//,$_);
for($j=0;$j<=$#chars;$j++){
$numstr .= sprintf("%02d", $char{$chars[$j]});
}
$words{$numstr} = $_;$numstr = "";
}
foreach $numstr (sort keys %words){
print encode('utf-8', "$numstr $words{$numstr}"),"\n";
}
__END__
いぬ
とちのき
にんじん
はむたろう
ろば
へらぶな
とり
ほらがい
-----$
出力は次のようになります。
bash-3.2$ perl daviusort.pl
000900 いぬ
010000 ろば
022215012300 はむたろう
0347004700 にんじん
0421000000 ほらがい
0521002000 へらぶな
0607253700 とちのき
060800 とり
On Thu, 26 Jun 2008 00:50:30 +0900 (JST)
saw@...-nokuchi2pho.ne.jp (Yさ) さんwrote:
> こん○○は、でびさん。
>
>
> davi writes:
>
> > 他に良い方法ってないでしょうかね?
>
> ヒントだけでよければ、こんな感じでどうでしょう?
> -----[usort.awk]
> BEGIN{
> last=split("い,ろ,は,に,ほ,へ,と,ち,り,ぬ,る,を,わ,か,よ,た,れ,そ,つ,ね,な,ら,む,う,ゐ,の,お,く,や,ま,け,ふ,こ,え,て,あ,さ,き,ゆ,め,み,し,ゑ,ひ,も,せ,す,ん",tbl,",");
> }
> function GetPos(s, i){
> for(i=1; i<=last; ++i)
> if(s==tbl[i]) return i;
> return last+1;
> }
> { n=length($0);
> for(i=1; i<=n; i+=2) printf("%02d", GetPos(substr($0,i,1) substr($0,i+1,1)));
> printf(",%s\n",$0);
> }
> -----
>
> >gawk -f usort.awk in_file.txt | sort | gawk -F, "{print $2}"
> いぬ
> ろば
> はむたろう
> にんじん
> ほらがい
> へらぶな
> とちのき
> とり
>
>
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html