スポンサーリンク
最近はインフラエンジニアでもすっかりオンプレミスのサーバを使う機会が減っており、AWSなどのクラウドサービスを使うことが増えてきました。
そんな風に環境が変わっても、インフラエンジニアのトラブル対応の基本はそんなに変わらないと思います。トラブル対応の基本はやはりログ解析です。
前置きが長くなりましたが、そんなログ解析で一番使いやすいツールは個人的にはawkだと思っています。ということで今回はawkのTipsを1つ書きたいと思います。
関連記事: awkを10倍使いこなして働き方改革
関連記事: awkって何?何ができるの?をできる限りわかりやすく伝えたい
awkを使う時、行数とカラム数を使うことがよくあります。例えば、
そんな時、awkさんはちゃんとビルトインの変数として用意してくれています。
ということで、使用例とともに説明します。
ちなみに、例で使う入力データはこんな感じです。
$ echo -e 'aaa bbb ccc\nddd eee fff\nggg hhh iii'
aaa bbb ccc
ddd eee fff
ggg hhh iii
現在の行数は NR という変数で取得できます。以下のように使います。
$ echo -e 'aaa bbb ccc\nddd eee fff\nggg hhh iii' | awk '{print NR}'
1
2
3
このように、print NR
とすることで現在の行数を表示してくれます。
ファイル全体の行数を取得したければ、
$ echo -e 'aaa bbb ccc\nddd eee fff\nggg hhh iii' | awk 'END{print NR}'
3
とすれば取得できます。
なお、例に上げた「表形式的なデータを使う時、先頭行は項目名なので除外したい」という場合は、
条件としてNR>1
のようにしてあげれば2行目以降のみを表示してくれます。
$ echo -e 'aaa bbb ccc\nddd eee fff\nggg hhh iii' | awk 'NR>1{print}'
ddd eee fff
ggg hhh iii
次にカラム数です。こちらは NF という変数で取得できます。
以下のように使います。
$ echo -e 'aaa bbb ccc\nddd eee fff\nggg hhh iii' | awk '{print NF}'
3
3
3
このように出力されます。
ちなみに、末尾のカラムだけを表示させたければ以下のようにできます。
$ echo -e 'aaa bbb ccc\nddd eee fff\nggg hhh iii' | awk '{print $NF}'
ccc
fff
iii
この入力値において、$NF
という変数は$3
という意味と同じなので、末尾のカラムだけ表示されます。
awkは非常に歴史あるツールですが、未だにログ解析などのテキスト処理においては最強だと(個人的に)信じています。
スポンサーリンク