作者: 藤岡和夫
日時: 2008/6/28(01:20)
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