コーディングしていると、、、
みんなどれくらいの大きさのファイル作成してるのかな?
既存のファイルはどれくらいの大きさなのかな?
各ファイルの行数知りたい。
あると思います。
勉強も兼ねて、コマンドで取得してみることにしました!
##実行環境##
windows10に WSLを利用してLinux(Ubuntu)をインストールしてコマンドしました。
##行取得##
wcコマンドを使います
以下のように
wc 対象ファイル と記載すると
$ wc *.txt
13 13 38 t01.txt
38 33 106 t02.txt
4 3 7 t03.txt
21 18 43 t04.txt
75 33 116 t05Service.txt
18 16 35 t06Service.txt
148 14 171 t07Service.txt
317 130 516 total
カレントディレクトリに存在するtxtファイルの情報の取得ができます。
取得した情報は項目ごとに表示されています。
行数 単語数 ファイル容量(バイト数) ファイル名称
13 13 38 t01.txt
...
...
317 130 516 total ここは合計
このままだと余分な情報が多いので
-l オプションで行数のみ取得
~/work$ wc *.txt -l
13 t01.txt
38 t02.txt
4 t03.txt
21 t04.txt
75 t05Service.txt
18 t06Service.txt
148 t07Service.txt
317 total
行数とファイル名のみなのでだいぶ見やすくなりました。
##行数順に表示。##
wcコマンド パイプ'|' sortコマンドを使用しました。
$ wc *.txt -l | sort
4 t03.txt
13 t01.txt
18 t06Service.txt
21 t04.txt
38 t02.txt
75 t05Service.txt
148 t07Service.txt
317 total
いい感じにファイル行数順に並びました。
次は 「***Service.txt」ファイルだけ取得してみます。
$ wc *Service.txt -l | sort
18 t06Service.txt
75 t05Service.txt
148 t07Service.txt
241 total
やった!サービスファイルの行数のみ取得できました。
・・・
##今度は、平均を表示!##
まず TOTAL の行が邪魔なので削除します。
sedコマンドを使用しました。
これはアドレス部に$を指定すると最後の行を表すのでそれに対してd(削除)を実行します。
$ wc *.txt -l | sort | sed '$d'
4 t03.txt
13 t01.txt
18 t06Service.txt
21 t04.txt
38 t02.txt
75 t05Service.txt
148 t07Service.txt
消えました!
更に
awkコマンドで平均の表示を行います。
$ wc *.txt -l | sort | sed '$d' | awk '{n += $1}{i +=1 }; END{print int(n/i) }'
45
上記のコマンドから平均行数「45」が取得できました!!
因みに awk が何をしているかというと。。。
1行毎に 行数をnにプラス iに+1 全行終わったら 表示 少数点切り捨て(n÷i)
awk '{n += $1} {i +=1 }; END {print int(n/i) }'
みたいな感じです
##wcコマンドのオプションは以下のようなのがあります。##
-l
ファイルの行数を表示する。
-c
ファイルのバイト数を表示する。
-m
ファイルの文字数を表示する。
-L
最も長い行のバイト数を表示する。
-w
ファイルの単語数を表示する。
##使用しませんでしたが、以下のようなコマンドでファイル数を調べることができるようです。##
$ ls -1 | wc -l
lsコマンドのオプションは「-1(数字の1)」
wcコマンドのオプションは「l(アルファベットのLの小文字)」
[awkについてメモ]
(https://qiita.com/SYutaka/items/b6aadfa279c516a3b90b)