Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

bash

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その4:-Fで分割文字を

Fオプションをつかうと、分割文字を指定できます。 実際の所 $ cat data Haruhi!100 Mikuru!80 Yuki!120てな形にした場合、「-F"!"」てな感じで指定してあげます。 selfに配列形式で格納されています。通常のRuby配列の通り、0始まりです。 $ cat data | gr…

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その3:sumメソッドとavgメソッド

avgはカラムの平均を出すメソッドです。 $ cat data | grep -v "^$" | gr8 -C 2 'map(&:to_i).avg' 100.0この記法は、以下のようにショートカットができます。 $ cat data | grep -v "^$" | gr8 -C 2 'avg_i' 100.0平均があれば、合算のsumのあります。 $ ca…

AWKっぽい操作をRubyの構文でやるCLIツール「gr8」 その2:mapメソッド

gr8でのmapは1行分をselfとみなし、順繰りにぶん回すメソッドです。 gr8は内部的にRubyを使っているので……ブロックを渡す事も、&:でlambdaを渡す事ができます。 $ cat data | grep -v "^$" | gr8 -C 1 'map(&:downcase)' haruhi mikuru yuki実装はオリジナル…

jotコマンドではprintf記法が使える

jotコマンドでは"-w"オプションをつけてあげる事でprintf記法が使えます。 $ jot -r 5 10 20 | sed -e "s/\(.*\)/ \1 kByte/"上のようなコマンドが、次のように書き換わります。 $ jot -w "%d kByte" -r 5 10 20 11 kByte 15 kByte 18 kByte 13 kByte 14 kBy…

shufコマンドで行をランダムに散らす

shuffコマンドで行をランダムに散らすことができます。 OS Xの場合は、 OS Xのdateコマンドをぶん投げたくなったら、coreutilを入れて上書きしてしまうのも手 - Bye Bye Moore で取り上げたようにcoreutilを導入した上でgshufを叩けば使えます。 $ gshuf -i …

rsコマンドでカラムをまとめる

rsコマンドでカラムをまとめることができます。 実際のところ jotで100個の数をランダムに生成し、それを10×10の行列にする場合 $ jot -r 100 | rs 10 10 31 38 5 54 35 22 12 62 90 41 34 74 30 50 94 49 52 23 13 93 10 91 7 74 93 79 25 51 75 46 …

sedでグループ化にマッチしたモノは"\NUM"に入る

sedでグループ化にマッチしたモノは"\NUM"に入ります。 具体例 192.168.0.NUMという数値列を作る場合を想定します。 seqで1から9までの数値を生成し、sedで置換という手順で作ろうとすると以下のようになります。 $ seq 1 9 | sed -e "s/\([0-9]\)*/host 1…

Process Substitution(プロセス置換?)を使って、地獄の名前付きパイプや一時ファイルからサヨナラバイバイ

Process Substitution(プロセス置換?)は、ぱっと見リダイレクトっぽい構文の素敵テクです。 これを使えば地獄の名前付きパイプや一時ファイルからサヨナラバイバイ。 使い方 $ diff <(command1) <(command2) とやれば、コマンド間出力の比較ができます。 …

selectでBashでも対話型っぽいコマンドを実装可能

selectを使うと、Bashでも対話型っぽいコマンドを実装可能です。 実際のところ #! /bin/bash select type in "hoge" "fuga" do echo "You choose $type." done exitこれを実行すると $ bash sample.shell 1) hoge 2) fuga #?とでます。 試しに1を選ぶと #? …

軽い仕事のためにディレクトリ移動したくない場合、グループ化を起動させると楽

別の仕事を実行中、割り込み仕事が入るケースありますよね。 しかもディレクトリ移動しないと出来ないようなもの。いままでは新規タブ開いてやってましたが、 コマンド群を()で括ることでサブプロセスを起動する手があります $ ( cd /cygdrive/c/Users/SHU…

直前のコマンドの引数を継続してつかう

「!*」で直前のコマンドで使った引数を呼び出す事ができます。 $ echo "hello\n" hello\nとした場合、 $ printf !* printf "hello\n" helloと、一旦展開された後で、実行されます。 コマンド誤爆でも大活躍 これを活かせば、コマンドを誤爆した場合にもそ…

historyの番号を指定して実行する

historyコマンドを実行すると、こんな感じで「番号」「コマンド」という順番ででてきます。 $ history 10 558 basename `dirname hoge/huga/ruby.rb` 559 basename `dirname hoge/huga/ruby.rb` 560 history 561 basename `dirname hoge/huga/ruby.rb` 562 e…

bashでもcase文がつかえる

bashでも、caseが使えます。 たまにみかける、 if [ some_rule ]; then #something to do else #something to do fiを置き換えるにはちょうど良いかもしれません。 POSIX的にどうなのかは、調査中ですが…… 実際のところ 記法は以下のとおりです。 case word …

bashのfor文で規則性のある文字列をつくる

bashのfor文では、多重配列っぽいものを渡すことができます。 これを利用すれば規則性のある文字列をつくることが可能です。 実際のところ $ for n in {1..10}{a..f}; do printf "%03s\n" $n; doneというコマンドは 01a 01b 01c 01d 01e 01f 02a 02b 02c 02d…

Bashで海外の時刻を大雑把に知る

副業で海外と取引をしているのですが、 その時に何かと問題になるのが先方の時間帯。 下手な時間に反応するのもあれですし、 目を血走らせて深夜にきた返信を即レスしたら向こうはとっくに帰宅してた…とか。そういう時は、軽く先方の時刻を知っておくと楽に…

bashコマンドに文字列を渡すと実行してくれる

任意の出力結果をパイプでbashに渡してあげると、 それが解釈可能である場合実行してくれます。例えば、echoで「cal」と出し、それを繋ぐケースでは…… $ echo 'cal' | bash 12月 2014 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19…

オプションとpstopdfコマンドを使ってmanの結果をpdfに書き出す

manコマンドにもオプションがあります。 このうち、"-t"オプションは標準出力にmanの結果を書き出す子です。 -t Use /usr/bin/groff -Tps -mandoc -c to format the manual page, passing the output to stdout. The default output format of /usr/bin/grof…

カンマ区切りの文字列を配列に切り分けて処理する

カンマ区切りで複数行あるテキストファイル...たとえばcsvみたいなものを切り分ける方法です rubyのsplitみたいな感じで配列に切り分ける方法です $ head sample.txt hoge,huga,piyo foo,bar,bazz 1,2,3read -aをwhileでぶん回して配列にツッコみます。 ...U…

Bashスクリプトを使って溜まりに溜まったローカルの不要branchを消す

リモート開発をやっていると、不要ブランチが出て来ます。 こまめに消していれば良いのでしょうが、修羅場ではそうも言っていられません。 と、いうわけで、今回の記事では不要ブランチを綺麗にするbashスクリプトを紹介します。 $ for var in `git branch |…