作者: 藤岡和夫
日時: 2004/1/02(01:28)
あけましておめでとうございます。本年もよろしくお願いいたします。

On Thu, 01 Jan 2004 02:02:28 +0900
dune <FZH01112@...> さんwrote:

> 極悪です。
> 
> Ueta Masayuki さんの [TSfree:584] Re: 欄区切りのソート から
> >(改行が欄の区切りで、空行がレコードの区切り)
> 
> それでは、各レコードは空行で区切られており、ひとつのレコード
> は改行で区切られた複数のフィールドから成ってる、ということで。
> 
> D:% cat sort_fields2.pl
> use Sort::Fields;
> $/ = "";
> my @paragraph = grep(s/\n*\Z/\n\n/,<STDIN>);
> print fieldsort([@ARGV,0],@paragraph);

 私はオーソドックスに考えてみました。

perl mlsort.pl ソート対象行 infile > outfile

#mlsort.pl
$/="";$lnum = shift;
while(<>){
  ($mlr{(split(/\n/))[$lnum - 1]} = $_) =~ s/\n*\Z/\n\n/;
}
foreach $key (sort keys(%mlr)){
  print $mlr{$key};
}

> 
> D:% cat hoge2.txt
> お
> け
> さ
> 
> え
> こ
> し
> 
> う
> く
> せ
> 
> あ
> か
> そ
> 
> い
> き
> す
> D:% perl sort_fields2.pl 3 < hoge2.txt
> お
> け
> さ
> 
> え
> こ
> し
> 
> い
> き
> す
> 
> う
> く
> せ
> 
> あ
> か
> そ
> 
> 
> D:%
> 
> Sort::Fields::fieldsort() の中身は Schwartz 変換なので、
> 速さを競うなら Guttman-Rosler 変換にしたほうがよさげです。
> -- 
> FZH01112 at nifty.com
> http://hpcgi1.nifty.com/dune/gwiki.pl?
> 

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/