ねもぷらす

ふぁいんでぃんぐねもの日記。プログラミングとか育児とか

使い慣れないコマンド

xargs - 標準入力からコマンドラインを作成し、実行する

なんのこっちゃ。
たとえば大量のファイルを消そうとしたときに

$ rm *

だと引数が多すぎて怒られることがある。
これをファイルリストの引数として xargs に渡せば制限を越えないようにいい感じに処理してくれるという親切。

$ ls * | xargs rm

expand / unexpand - えきすぱんだ / あんえきすぱんだ

expand : タブ文字 → スペース
unexpand : スペース → タブ文字


nl - 行番号を付けてファイル出力

vi の :set number みたいなもの。標準入力からやってみたらこうなった。

~$ nl <<EOF
> hello
> world
> EOF
     1  hello
     2  world

od - ファイルを 8 進数などの形式で出力

$ cat helloworld.txt 
hello

デフォルトは8進数

$ od helloworld.txt 
0000000 062550 066154 005157
0000006

ascii表示

$ od -t c helloworld.txt 
0000000   h   e   l   l   o  \n
0000006

join / paste - ファイルの横結合

ファイル1

$ cat a.txt 
01 aaaa 9999
02 bbbb 8888
11 1111 1111
03 cccc 7777

ファイル2

$ cat b.txt 
01 1234 4567
02 9876 6543
99 9999 9999
03 1111 2222

join するとマッチする行のみが出力。あらかじめ結合行でソートされている必要があるためこの例だと最初の2行しか一致しない。

$ join -j 1 a.txt b.txt
01 aaaa 9999 1234 4567
02 bbbb 8888 9876 6543

paste は関係なしに水平方向に結合。

$ paste -d* a.txt b.txt
01 aaaa 9999*01 1234 4567
02 bbbb 8888*02 9876 6543
11 1111 1111*99 9999 9999
03 cccc 7777*03 1111 2222