タグ

2019年1月7日のブックマーク (4件)

  • フィルタ言語 AWK (3)

    02 月 06 日(月) フィルタ言語 AWK (3) AWK の配列をうまく使えば,複雑な処理を簡単に記述できる場合がある. AWK の第一歩 や gawk 日語マニュアル 等を参考にしながら, 作業を進めて行こう. AWK の配列 AWK の連想配列 日の課題 AWK の配列 AWK では,変数と同様に,配列についても宣言せずに利用できる. つまり,AWK の配列は, 動的配列(要素数が可変の配列)ということだ. Cの配列は,基的には固定配列だった. 動的配列を使うこともできたが, 準備の malloc( ) と 片付けの free() とが必要で, 面倒だった.

    U1and0
    U1and0 2019/01/07
    配列
  • awkで重複行を高速削除する。 - 忘れないようにメモっとく

    awkで重複行を高速削除する。 行の重複削除で調べるとよく出てくるのが、sort & uniqを使ったコマンド。 ソートはファイルが大きくなると、実行にかなり時間がかかってしまいますね。 ソートせずに高速実行できるのが、次のawkコマンド。 awk '!colname[$1]++{print $1}' こういうファイルがあって、一列目の名前を取得したいとき、!colname[$1]は、データをキーにした連想配列で、インクリメントされる。 ボブ りんご | colname["ボブ"] → 0 {print $1} マイケル まんが  | colname["マイケル"] → 0 {print $1} マイケル まんが | colname["マイケル"] → 1 サブロー PC   | colname["サブロー"] → 0 {print $1} サブロー キーボード | colname["サブ

    awkで重複行を高速削除する。 - 忘れないようにメモっとく
    U1and0
    U1and0 2019/01/07
    awkでsort 連想配列使って!でboolianにすれば重複データはあの世へいく
  • awkで列の種類ごとに集計する。 - 忘れないようにメモっとく

    連想配列のキーにグループの名前を使えばおk。 集計するファイル↓↓ hoge.txt りんご 230 りんご 300 ばなな 190 ばなな 190 みかん 110 りんご 310 ばなな 190 みかん 110 みかん 130 awkファイル↓↓ sum.awk { sum[$1]+=$2 }; END { for (key in sum) { print key, sum[key] } } スクリプトの実行と結果。 awk -f sum.awk hoge.txt ばなな 570 みかん 350 りんご 840

    awkで列の種類ごとに集計する。 - 忘れないようにメモっとく
    U1and0
    U1and0 2019/01/07
    グループ集計 pandasのdf.groupby(index).sum()てきな。
  • Awkワンライナー (最小値、最大値、合計、平均、中央値) - 雨の歌をいつか書く

    簡単な解析はワンライナーでやっちゃおう。ということでまずは簡単に最小値と最大値と平均を求めるAwkワンライナーを書きます。 たとえば以下のようなログファイルがあるとする。僕はいま、3列目の数値に対して統計値を出したいのだ。 0 0 147.086 0 10 141.269 0 20 10000 0 30 2805.22 0 40 152.003 0 50 144.762 0 60 144.926 最大値 cat test.log | awk '{if(m<$3) m=$3} END{print m}' { if(m<$3) m=$3 } END { print m } $3ってのが第3番目の列という意味なので、ここを変えれば別のところも参照可能。BEGINの中で初期値を設定する必要があるのかなと思っていたけど、いきなりif(m>$3)を実際にやってみたら大丈夫だった。 最小値 基的には同

    Awkワンライナー (最小値、最大値、合計、平均、中央値) - 雨の歌をいつか書く
    U1and0
    U1and0 2019/01/07
    awkで中央値