コマンド

awkで乱数を使いたい - rand(), srand()

awkで乱数を使いたい時は rand() 関数を使います。 $ echo | awk '{print rand()}' 0.827331 rand() は0~1までの乱数を発生させます。そのため、例えば1〜10までの値にしたい時は以下のように書く必要があります。 $ echo | awk '{print int(rand()*10)+1}' …

awkで文字列を結合する

awkで文字列を結合したい場面は稀によくあると思います。awkでの文字列の結合方法は一般的なプログラミング言語とは違い、少し癖があります。というのも、awkには文字列を結合するための演算子がありません。他の言語では + とか concat とかが用意されてい…

awkで特定のフィールドだけを抜き出す

awkでは入力をデフォルトで行単位のレコードとして読み込み、さらにそれをフィールドに分割します。フィールドは組み込み変数FS(Field Separater)で分割したモノであり、デフォルトはスペースとタブです。フィールドには左から順に$1, $2と番号が割り振られ…

awkのパターンとアクション

awkを書く上で重要なパターンとアクションという独特な概念について紹介します。 パターンとアクションとは awkという言語にはパターン、アクションという2つの重要な概念があります。動作は単純明快で、「パターンにマッチしたレコードに対してアクションを…

Macのコマンドの挙動がなんかおかしい時はcoreutilsを使おう

Macユーザーだったらこんな経験があると思う。ネットからコマンドを丸々コピってきてターミナルに貼っつけたけどなんか上手くいかない。command not foundじゃない、コマンドはちゃんとある、コピペもミスってない。なんなんだ? 特に、シェル芸ワンライナー…

CSVで特定の列を抽出するならcutコマンドではなくxsvコマンドを使うべき

CSVで特定の列を抽出し、何らかの処理を加えたい場合は割とよくある。そんな時に書きがちなのが以下のようなコマンドだ。 cat test.csv | cut -d, -f 2 これでCSVの1列目だけを抽出できるというわけだ。めでたしめでたし...。 とはならない。この方法には問…