join(1) の使い道

一生使うことがないだろうと思っていた join(1) を使う日がついに来た。
事の起こりは ipcs。

$ ipcs -p

------ 共有メモリ 作成者/直近の命令 --------
shmid      所有者  cpid       lpid
262144     ao         5620       24536
294913     ao         5682       5335
163842     ao         5603       5335
196611     ao         5618       5335
229380     ao         5618       5335
327685     ao         5622       5335
360454     ao         5622       5335
393223     ao         5718       5335
425992     ao         5754       5335
458761     ao         5756       5335
491530     ao         5758       5335
524299     ao         5784       24098
851980     ao         5841       23823
884749     ao         5841       23823
786446     root       5335       25498
917519     ao         5665       23116
950288     ao         11877      5335
1736721    ao         24462      5335
1769492    ao         5550       5335
1802261    ao         5550       5335


------ メッセージキュー PIDs --------
msqid      所有者  lspid      lrpid

オプション -p で作成者プロセスを表示させたのだが PID だけでは何のプログラムなのかわからない。
そこで ps と join する。

$ ipcs -p | sed '1,3d; /^$/,$d; s@ \+@,@g; s@,$@@' | sort -k 3 -t, > ipcs.out
$ ps -e --no-heading | sed -e 's@^ \+@@; s@ \+@,@g' | sort -k 1 -t, > ps.out
$ join -t, -1 3 -2 1 ipcs.out ps.out
11877,950288,ao,5335,?,00:00:01,notification-da
24462,1736721,ao,5335,pts/1,00:00:13,java
5335,786446,root,25498,tty7,00:24:52,Xorg
5550,1769492,ao,5335,?,00:00:00,x-session-manag
5550,1802261,ao,5335,?,00:00:00,x-session-manag
5603,163842,ao,5335,?,00:00:34,scim-panel-gtk
5618,196611,ao,5335,?,00:01:57,metacity
5618,229380,ao,5335,?,00:01:57,metacity
5620,262144,ao,24536,?,00:01:07,gnome-panel
5622,327685,ao,5335,?,00:00:02,nautilus
5622,360454,ao,5335,?,00:00:02,nautilus
5665,917519,ao,23116,?,00:00:00,update-notifier
5682,294913,ao,5335,?,00:00:00,nm-applet
5718,393223,ao,5335,?,00:00:00,trashapplet
5754,425992,ao,5335,?,00:00:00,fast-user-switc
5756,458761,ao,5335,?,00:00:01,deskbar-applet
5758,491530,ao,5335,?,00:00:00,mixer_applet2
5784,524299,ao,24098,?,00:00:24,sylpheed
5841,851980,ao,23823,?,00:56:34,firefox-bin
5841,884749,ao,23823,?,00:56:34,firefox-bin

join するファイルは対象カラムでアルファベット順ソートされていないといけないので sort を使う。
それにしても ps や ipcs は余計なヘッダを出力する。