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

 次に示すのは、ソートに複数のキーを使うことが望ましい例である。まず、第2列に基づいてソートするが、この列には100という値がいくつもある。したがって、そうしたレコードについては、つづいて第1列に基づくソートを行うと、出力が読みやすくなる。-n/--positionコマンドラインオプションは、指定のフィールドをキーとしてソートするようmsortに伝えている。フィールド間の分離にはホワイトスペースを使うのがデフォルトであり、第1列と第2列の間のスペースでデータが2つの列に正しく分割される。しかし、-d/--field-separators引数を用いて、複数のフィールド分離文字を指定することもできる。コマンドラインの中央にある-c nオプションは、指定されたキーを数値的にソートせよ、という指示である。デフォルトでは辞書的な比較が行われるため、20という値が100という値の後ろに来ることになるが、ここでは数値比較により、出力のいちばん上に置かれている。

$ cat multi-key-charnum.txt
act 100
there 100
foo 100
bar 300
urusai 300
small 20
one   20

$  msort.utf8proc --quiet --line -n 2 -c n -n 1  multi-key-charnum.txt
one   20
small 20
act 100
foo 100
there 100
bar 300
urusai 300

 -cで指定できるソート順オプションには、日付、時刻、ドメイン、電子メールアドレス、角度、ハイブリッドなど、さまざまなものがある。数値オプションにも何通りかある。ハイブリッドモードは、テキストと数値の反復パターンに基づいてフィールドを分割するというもので、システムログによくあるIPアドレスのソートに非常に便利なオプションである。次に示すのは、syslogで得たiptablesパケットレポートの部分サンプルである。これを、まずソースアドレスで、次に宛先アドレスでソートしてみよう。-t/--tagオプションでログからIPアドレスを拾い出し、-c hオプションで、どのキーについてもハイブリッド比較モードでのソートを行うよう指示する。

$ cat hybrid-ips.txt
Apr 29 20:14:58 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.3.4 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.4 DST=192.168.4.12 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.0.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth1 OUT=eth0 SRC=192.168.3.3 DST=192.168.3.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.4 DST=192.168.0.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.0.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.0.133 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.1.33 LEN=76...

$ msort.utf8proc -ql -t SRC= -c h -t DST= -c h  hybrid-ips.txt
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.0.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.0.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.0.133 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.1.33 LEN=76...
Apr 29 20:14:58 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.2 DST=192.168.3.4 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth1 OUT=eth0 SRC=192.168.3.3 DST=192.168.3.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.4 DST=192.168.0.33 LEN=76...
Apr 29 20:15:48 fots kernel: invalides IN=eth2 OUT=eth0 SRC=192.168.3.4 DST=192.168.4.12 LEN=76...

 msortでは、ソートキーを--tag正規表現で指定できるし、そのキーの比較方法をいろいろに選択できる。このため、Perlスクリプトなどの世話にならなくても、直接、コマンドラインから多種多様なソート作業を実行できる。扱うデータの種類によっては、外国語の記数法がサポートされることも大きな利点となる。

Ben Martinは、ファイルシステムに携わって10数年。現在、PH.D.も取得し、libferris、各種ファイルシステム、検索ソリューションを中心にコンサルティング事業を展開している。

Linux.com 原文

最終更新:2008年07月21日 17:07