自分のよく使うunixコマンド
こんばんわ。
いや、朝見ている人がいるかもしれないからおはようございます。
.....
こんにちは!
気晴らしに記事を書きます、|.+| です。
今回の内容はプログラミングで必須なツール、
神様の作ってくださった最高のプログラミング言語、Unixコマンドです。
これがあればpythonだろうがperlだろうがRだろうが必要ない!
ターミナルに一行書くだけで!文字列編集だろうがファイル統合だろうが!できちゃいます!
基礎的なもの( cd ls mv cp rm mkdir )は省略させていただきます、ご了承ください...
まぁ定番の物から
1. cut
これは便利。各行を決まった方式で分裂し、自分の欲しい列を手に入れられます。
自分は数千行のファイルでいちいちプログラミングで読み込んでするのがめんどくさいから重宝してます。
【使い方】
cut -d <区切り文字> -f <欲しい列番号> <ファイル番号>
-d (区切り文字) はデフォルトだとtab (\t) ですね、tabularファイルだったら気にしないでいいと思います。
-f (欲しい列番号) は一つの数字、もしくはコンマやハイフンを使って -f 1-4 (1~4列)の様に使えます。また -f 3- のように使うと、3列目以降という認識になります。
一応区切り文字数も指定できます。◎番目〜□番目の文字が欲しい場合は
cut -c ◎-□ <ファイル>と出来ます。
2. sort
これは各行の順番をそろえるコマンドです。例えばa~zの文字が26行に渡ってランダムに割り振られているときsortを使うとアルファベット順に全部整形されます。
【使い方】
sort <ファイル名>
オプションは幾つかあります。
-nは数字としてソートする事。1,2,10,11,12はデフォルトでsortすると1,10,11,12,2となります。そこを-nつけてあげる事で数字として認識します。
-r 逆順。昇順だった物を降順にしてくれます。
3. uniq
これは連続して同じ行がある場合にまとめて表示してくれます。目で確認するのが面倒なほどの行数があるファイルだと重宝します。というかしてます。
【使い方】
uniq <ファイル名>
これもオプションいっぱいありますが、自分が特に使ってるもの。たいていの場合sortしてからuniqを使った方がいいです。
-c 行数をカウントして、<数字> <行の内容>という風に表示してくれます。
-d 重複している行のみを表示する。
====余談=====
1,2,3,をまとめて使うのをボクはよくしてます。
cut -f 2,3 hoge.txt | sort -n | uniq -c
という風に。|はパイプと言って、一個左のタスクの結果に対して右のタスクを行う、という感じです。パイプの数には限界はないです(常識の範囲内の使用をお願いします)。
一応自分がやった感じだと
cut -d "," -f 1,4 hoge.txt | sort -n | uniq | cut -d ":" -f 2 > foo.txt
>とはリダイレクトと言って、左の結果を右のファイル名に書き込む、という意味となります。ですがこのリダイレクトは他にもいろんな使い方が合って、結果だけではなくエラーも別ファイルに書き出せたりしちゃえます(自分はやった事無いです...)
これに関連して、/dev/nullという便利な物があります。
ここにリダイレクトされた物は、ハードに蓄積される事無く消えます。
試しに % yes > /dev/null としてみてください。
yesは永遠に"yes"をプリントするコマンドですが、/dev/nullに書き込んで、一回yesを殺してみてください。(すぐに殺さないとパソコンが熱くなる事があります)
そして % less /dev/null とやってもyesは一つもありません。
エラーだけを見たいときとかで使った事あります。
====余談終了====
4. grep/egrep
これはもう便利。テキストファイルを開いて⌘+fをやる必要がなくなります。
【使い方】
% grep "<query>" hoge.txt
とやると、<query>の含まれる行のみプリントされます。
オプションはかなり豊富です。
-A <数字> : <query>の含まれる行の前<数字>行数もプリントします。
-B <数字> : <query>の含まれる行の後<数字>行数もプリントします。
-n : その行が何行目かも表示します。
-v : <query>を含まない行だけを表示します。
複数のqueryで検索したい場合はegrepを使います。
% egrep '<query1>|<query2>' hoge.txt
という風にパイプでつなげていけます。ですがこれはどちらかのqueryを含む場合になりますので、両方とも含まれる場合をしたかったら、2度grepするのが良いかもですね。
ボクはaliasでgrep --colorを張っています。これは<query>にのみ色づけしてくれるので若干見やすくなります。