最近よく使ったコマンドのメモ
最近、シェルスクリプトを書くことが多くて文字列処理をたくさんしたのですが、その中でとても便利だったコマンドをメモしておこうかと。
ただ、ディストリビューションとかコマンドそのもののバージョンによって微妙に違うのでいつでもそれが使えるわけじゃないのだけど……
awkとsedも大活躍だったのだけど、いろいろ覚えたせいで書くのが面倒なので今回はスルーするかなー。
環境:Ubuntu 12.04 LTS 64bit
cut
$ echo -n 'aaa,bbb,ccc' | cut -d , -f 2 bbb $ echo -n 'aaa,bbb,ccc' | cut -d , -f 2,3 bbb,ccc
簡易awk的なことができるcutコマンド。
paste
$ cat aaa 1 2 3 4 5 $ cat bbb aaa fff bbb ggg ccc hhh ddd iii eee jjj $ paste aaa bbb 1 aaa fff 2 bbb ggg 3 ccc hhh 4 ddd iii 5 eee jjj $ paste -d : aaa bbb 1:aaa fff 2:bbb ggg 3:ccc hhh 4:ddd iii 5:eee jjj
ファイルの中身を行ごとに横に?連結できるpasteコマンド。
デフォルトだとタブで連結されるので、-dで連結される文字を指定できる。
tr
$ echo 'a,b,c,d,e,f,g,h,i,j,k,l,m' | tr , ' ' a b c d e f g h i j k l m $ echo 'a,b,c,d,e,f,g,h,i,j,k,l,m' | tr , : a:b:c:d:e:f:g:h:i:j:k:l:m $ echo 'a1b2c3d4e5f6g7' | tr [:digit:] ' ' a b c d e f g
特定の一文字を置換するtrコマンド。
……だと思ってたらPOSIXの文字クラスが指定できるみたい。
join
$ cat aaa 1 one 2 two 3 three 4 four 5 five $ cat bbb 1 aaa 2 bbb 3 ccc 4 ddd 5 eee $ join aaa bbb 1 one aaa 2 two bbb 3 three ccc 4 four ddd 5 five eee
2つのファイルの共通のカラムをいい感じに混ぜてくれるjoinコマンド。
split
$ cat <<'EOB' > aaa > aaa > bbb > ccc > EOB $ split -l 1 aaa $ head x* ==> xaa <== aaa ==> xab <== bbb ==> xac <== ccc
ファイルをバイト数や行数ごとにファイル分割してくれるsplitコマンド。
大きくなりすぎたファイルを、指定行数ごとに分割するときにとっても役に立ったり。
sort
$ cat aaa 1 6 5 4 3 9 10 14 19 $ sort aaa 1 10 14 19 3 4 5 6 9 $ sort -n aaa 1 3 4 5 6 9 10 14 19
並べ替えをするsortコマンド。
今までオプションは使ったことなかったんだけど、意図する順序でなかった場合に使うと、とってもいいかも。
-uを使うとuniq的なこともできるみたい。
uniq
$ cat aaa 1 1 1 1 3 3 3 3 2 4 5 9 8 7 $ uniq aaa 1 3 2 4 5 9 8 7 $ uniq -u aaa 2 4 5 9 8 7 $ uniq -d aaa 1 3
重複を消したりするuniqコマンド。
-uでユニークな行だけを表示したり、-dでユニークでない行だけを表示したり。
sortと一緒に使うことが多いかも。