awk で各列毎に数値を足し算する方法
目次
スポンサードリンク
awk の基本構文
awk をワンライナーで実行する場合の基本構文は以下の通りです。 引数で指定したファイル、または、標準入力で指定したデータを対象とし、パターンにマッチした行に対し、処理を実行します。パターンは省略でき省略時は全ての行が対象になります。
awk パターン { 処理 } ファイルパス
コマンド | awk パターン { 処理 }
各列毎に数値を足し算する方法
awk の処理では演算子を使用することができ、各列の数値を足す際は、+= 演算子を使います。
サンプルで使用するデータは、ls -l コマンドで表示した以下のファイル一覧とします。 5列目にある各ファイルのサイズを合計してみます。
[root@hostname logs]# ls -l
合計 23652
-rw-r--r-- 1 root root 0 3月 13 15:35 access_log
-rw-r--r-- 1 root root 231864 4月 23 11:52 deflate_log
-rw-r--r-- 1 root root 802377 4月 25 11:52 error_log
-rw-r--r-- 1 root root 60062 4月 23 11:52 origin-access_log
-rw-r--r-- 1 root root 125421 4月 23 11:52 origin-error_log
-rw-r--r-- 1 root root 1455615 4月 23 11:52 ssl-access_log
-rw-r--r-- 1 root root 129839 3月 26 17:41 ssl-app_log
-rw-r--r-- 1 root root 21390785 4月 23 11:52 ssl-error_log
まずは、5列名のデータだけ表示してみます。処理部分を print $5 にすることでファイルサイズのみを抽出することができました。
[root@hostname logs]# ls -l | awk '{ print $5 }'
0
231864
802377
60062
125421
1455615
129839
21390785
以下の記述でファイルサイズを加算した結果を表示できます。
[root@hostname logs]# ls -l | awk '{ sum += $5 } END { print sum }'
24195963
{ sum += $5 } は、+= 演算子で、変数 sum に ファイルサイズを加算していきます。$5 でファイルサイズの列を指定しています。
END { … } の指定は、最後に1度だけ処理を実行するという指定です。一番最後に、変数 sum の値を出力しています。
プログラミング言語AWK
AWK 言語作者による解説本。名著。
リンク
Linuxコマンドについて学べるおすすめ書籍
Linuxコマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
リンク
関連記事
Search
Recent Posts
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)
- .php以外の拡張子でPHPを動作させようとして発生したエラー「Got error 'Access to the script '/var/www/html/php.html' has been denied (see security.limit_extensions)'」の原因と対処方法