ファイル名に「NHK」を含むtsファイルの合計サイズをGB単位で表示させたい。
コマンドの変遷
$ ls -l | grep NHK | awk '{print $5,$9}'
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9}'
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}'
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a"¥n"}'
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a"¥n"}'
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024"¥n"}'
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024" GB¥n"}'
ーーー
実際に流してみる。
「NHK」を含むファイルだけリスト表示する。
リストのうち、5列目と9列目を表示する。
$ ls -l | grep NHK | awk '{print $5,$9}'
リストの5列目(ファイルサイズ)を 変数a に足し込んでいく。
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9}'
(画面には変化なし)
足し込んだ 変数a を表示してみる(最終行が変数aの値つまりファイルサイズの合計値)。
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}'
最終行の後ろに改行 ¥n を入れる(¥は半角バックスラッシュに読み替え)。
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a"¥n"}'
最終行の前に、区切り文字 ===== を表示する。
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a"¥n"}'
サイズが分かりにくいので、1024で3回割って GB単位で表示する。
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024"¥n"}'
最終行の末尾に「GB」という文字列を表示する。
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print "=====¥n" a/1024/1024/1024" GB¥n"}'
これでコマンドはできた。毎回打つのは面倒なので、自作コマンド ma(My Awk)としてエイリアス登録し、一瞬で呼び出せるようにする。
$ vim ~/.bashrc
alias ma='ls -l | grep mp4 | awk '\''{a+=$5;print $5,$9} END{print "-----\n" a; print "=====\n" a/1024/1024/1024,"GB"}'\'''
ポイントは、コマンド内のシングルクオートを'\'' で記述すること。
※ こうしないと、エイリアスの記法(alias コマンド名='コマンド文字')にあるシングルクオートと混在してしまってうまく動かない。
追記
numfmt という便利なコマンドがあるらしい。
numfmt をしないとき
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}'
numfmt をしたとき
$ ls -l | grep NHK | awk '{a+=$5; print $5,$9} END{print a}' | numfmt --to=iec
こりゃ便利だ。