Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

msortでデータをソートする

2008年05月21日 11:40 Ben-Martin(2008年5月19日(月)) 1 2 3

 タグ付きデータのファイルがあって、これをソートしたいとする。固定フィールド長を持たない自由形式ファイルをGNU sortで扱うことは簡単ではない。だが、次のmsort呼び出しなら、ラストネームでデータをソートできる。最初の呼び出しでは長い引数名を使用しているが、これは例をできるだけ読みやすくするためで、最後のコマンドでやっているように短い引数オプションを使っても同じソートができる。-l/--lineオプションは、各行を1つのレコードとして扱うようmsortに指示している。-t/--tagオプションは、ソートキーを探すときに正規表現を使えという指示である。

$ cat tagged-data.txt
first:Frodo last:Baggins
first:Samwise last:Gamgee
first:Meriadoc last:Brandybuck
first:Peregrin last:Took

$ msort.utf8proc --quiet --line --tag last: tagged-data.txt
first:Frodo last:Baggins
first:Meriadoc last:Brandybuck
first:Samwise last:Gamgee
first:Peregrin last:Took

$ msort.utf8proc -qlt last: tagged-data.txt

 msortは、複数行にまたがるレコードも扱える。レコードどうしの分離に特殊文字が使われているときは、--record-separatorコマンドラインオプションを指定し、msortにその文字を使わせることができる。この指定がない場合、msortは2個以上の改行文字の連続をレコード分離記号とみなす。

 以下に示すのは上と同じデータだが、レコードが複数の行にまたがっている。ここでは、--blockオプションでレコードが複数行形式になっていることをmsortに伝えたうえで、ラストネームによらず、ファーストネームでソートを実行してみよう。レコードごとにfirstタグとlastタグの順序がまちまちであることに注意してほしい。さらに、Peregrinには新しい値を追加してあるが、これは結果の並び順にまったく影響していない。

$ cat multiline-data.txt
first:Frodo
last:Baggins

last:Gamgee
first:Samwise

first:Meriadoc
last:Brandybuck

something else
first:Peregrin
last:Took

$ msort.utf8proc --quiet --block  --tag first:    multiline-data.txt
first:Frodo
last:Baggins

first:Meriadoc
last:Brandybuck

something else
first:Peregrin
last:Took

last:Gamgee
first:Samwise
最終更新:2008年07月21日 17:07