本を読む

読書やコンピュータなどに関するメモ

一覧形式のテキスト2つから片方にだけ入っている要素を抽出する

 Advent Calendar祭に触発されて、Tipsコネタを1つ。

 1行に1要素ずつ並べたファイルというのは、Unix系OSでしばしば出てきます。たとえば、lsの標準出力をファイルにリダイレクトしたものもそうですね。

 この形式のファイルが2つあって、片方だけに含まれる要素を抽出するときや、共通する要素を抽出するときは、commコマンドが便利です。commコマンドはLinuxでもMacでも最初から入っていると思います。

 たとえば、2の倍数を並べたファイルと3の倍数を並べたファイルがあるとします。

$ cat m2.txt
02
04
06
08
10
12
14
16
18
20
$ cat m3.txt
03
06
09
12
15
18
21
24
27
30

 m2.txtにだけ含まれる要素は、こんな感じで抽出します。

$ comm -23 m2.txt m3.txt
02
04
08
10
14
16
20

 m3.txtにだけ含まれる要素を抽出。

$ comm -13 m2.txt m3.txt
03
09
15
21
24
27
30

 共通する要素を抽出。

$ comm -12 m2.txt m3.txt
06
12
18

 オプションに付けている数字は、1が「1つ目のファイルのみの要素」を、2が「2つ目のファイルのみの要素」を、3が「共通要素を示します。ややこしいのは、この数字が「出力するもの」ではなく「出力しないもの」を意味することです。ちなみに、オプションを付けないと3つがタブ区切りで表示されます。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/960-763c1506

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad