よくやる処理がgawkで便利にできると知ったのでいくつかメモ
画像サイズ変更
例: - sample.png => sample.jpg
従来 (確認 => 実行)
$ for f in $(ls *.png); do; echo convert -geometry 480x480 $f ${f/.png/.jpg}; done $ ^echo^
gawk (確認 => 実行)
$ ls *.png | gawk '{a=$1; sub(/\.png$/,".jpg",a); print "mv",$1,a}' $ ls *.png | gawk '{a=$1; sub(/\.png$/,".jpg",a); print "mv",$1,a}' | sh
従来のやり方が手癖に残ってて、そっちを使うことが多いけど、gawkパターンはきちんと正規表現できたりパイプできたりするので使い分けていこうとおもう
合計
例: pngファイルの容量調べる
$ find Assets -type f -name '*.png' | xargs -n1 ls -l | gawk '{SUM+=$5}END{print SUM/1024,"KB"}' 268.779 KB
集計
例: フォルダごとの容量調べる
$ find . -type f -name '*.png' | xargs -n1 ls -l | gawk '{ dir=gensub(/^(.+)\/[^\/]+$/,"\\1","g",$9); a[dir]+=$5 }END{ for (k in a) printf("%s\t%.2f\n", k, a[k]/1024)}' | sort -n -k2 ./node_modules/mapnik/lib/binding/node-v48-darwin-x64/share/mapnik/gdal 1.97 ./node_modules/tilelive-vector/node_modules/tiletype/test/fixtures 12.66 ./node_modules/tiletype/test/fixtures 12.66 ./node_modules/boom/images 28.79 ./node_modules/mapnik/node_modules/boom/images 28.79 ./node_modules/hoek/images 37.05 ./node_modules/mapnik/node_modules/hoek/images 37.05 ./node_modules/hawk/images 76.83 ./node_modules/mapnik/node_modules/hawk/images 76.83 ./node_modules/node-pre-gyp/node_modules/hawk/images 76.83 ./node_modules/tilelive-vector/node_modules/hawk/images 76.83
ヒストグラム
例: material-design-icons内のpngのファイル容量(byte) 分布
$ find . -type f -name '*.png' | xargs ls -l | gawk 'function step(n,s){return int(n/s)*s}function idx(n){ return n<1000 ? step(n,100) : "1000+" }{ a[idx($5)]++ }END{ for (k in a) print k,a[k] }' | sort -n -k1 0 1242 100 16501 200 17071 300 11819 400 8396 500 5590 600 4340 700 2934 800 2250 900 1753 1000+ 6023
行集計の便利さを感じる. こっからサクッとグラフにできるとさらにいいなあ
試行回数7