awkコマンドの使い方について
どうもこんにちは。
システムソリューション部の岡崎です。
今回はログの確認の際に併せて使うコマンドawkについて記入します。
awkコマンドとは
スペースや特定の文字で区切られた複数行のデータを処理する際に
特定の列のデータのみ出力したり、合計値を出したりできるコマンドです。
awk '{print$[出力したい列数];}'
例えば、以下のようなファイルがあります。
test.txt 1 2 3 5 1 2 3 6 1 2 3 7 1 2 3 8
1列目のみ表示したい場合は以下のようにすることで出力することができる。
cat test.txt | awk '{print$1;}' 1 1 1 1
使い方について
任意の文字を区切り文字として使用する場合
awk -F [区切り文字] '{print$1;}'
- 使用例
2列目のみ表示
sed -e 's/ /:/g' test.txt | awk -F ':' '{print$2;}' 2 2 2 2
行番号を出力する場合
awk '{print NR $1;}'
3列目のみ表示
sed -e 's/ /:/g' test.txt | awk -F ':' '{print NR $3;}' 13 23 33 43
ただこれだとわかりずらいので以下のようにする
sed -e 's/ /:/g' test.txt | awk -F ':' '{print NR " " $3;}' 1 3 2 3 3 3 4 3
特定の列が特定の文字列となっている行を出力する場合
awk '$1==[任意の文字]'
4行目が5のみ表示
sed -e 's/ /:/g' test.txt | awk -F ':' '$4=="5" {print NR " " $4;}' 1 5
逆の場合は
sed -e 's/ /:/g' test.txt | awk -F ':' '$4!="5" {print NR " " $4;}' 2 6 3 7 4 8
特定の列の数字を合計する場合
awk '{sum+=$1;}END{print sum;}'
1行目の合計を表示
sed -e 's/ /:/g' test.txt | awk -F ':' '{sum+=$1;}END{print sum;}' 4
平均値の場合は
sed -e 's/ /:/g' test.txt | awk -F ':' '{sum+=$1;}END{print sum/NR;}' 1
まとめ
運用にてログファイルを開くことはかなり多いと思いますが
ファイルを整形して開くとより見やすくなり、
エラーやアクセスの集計などかなり効率的に行えると思います。
今回のawkとほかのコマンドと併せて日々の運用に役立てると運用の効率化ができると思います。
この記事がお役に立てば【 いいね 】のご協力をお願いいたします!