grepやめてawkにする
仕事でやることがなくなってきました。
その結果、本来はJavaやJavaScript使ってWebアプリ作ってますが、それ以外の仕事もふられるようになりました。
今回ふられたのはLinux上で動いてるログ監視シェルの修正。
正直得意ではないけど出来ませんと言うと切られるので勿論引き受けました。
フリーランスは辛いです。
やることはログの出力フォーマットが変わったのでそれに合わせて解析方法を修正すること
現在のログのフォーマット
ERROR 2016-12-10 03:21:03,523 ERR001 エラー発生
現在のシェル
let ERROR_COUNT= `grep ^$ERROR /var/log/error.log | wc -l`
- grepでログファイルの各行の先頭がERRORではじまる行を出力
- wcで行数を出力
- 結果をERROR_COUNTに設定
この後に前回解析時のエラー件数をファイルから読み込んでERROR_COUNTの件数と比較、
増えてればエラーが発生したことをメール送信します
変更後のログのフォーマット
2016-12-10 03:21:03,523 ERROR ERR001 エラー発生
エラーの発生日付が先頭に出力されるように変更されました
変更後のシェル
let ERROR_COUNT= `awk '{if($4=="ERROR") print $1}' /var/log/error.log | wc -l`
- awkでログファイルの各行を区切り文字(デフォルトはスペース)で区切る
- 区切った文字の4つ目がERRORであれば区切った文字の1つ目を出力
- wcで行数を出力
- 結果をERROR_COUNTに設定
ERROR_COUNTに設定するコマンドを変更しただけで後は変更なし
awkは複雑な文字列操作ができますね。
簡単な解析ならgrepでできますが、複雑になるならawkの出番が増えそうです
サイトマップを自動生成するには
勉強もかねてブログ風のサイトを構築中
サイトマップを自動生成できるようにしたいと思いつつ他にやることが多くて手付かず
そんな時ははサイトマップを自動生成してくれる下記のようなサービスを利用するのがよいです
- サイトマップを作成したいサイトのURLを入力
- Startボタンクリック
ページを読み込んでアンカーを再帰的に解析してリンクを辿っているのでしょう
しばらくするとサイトマップが作成されてダウンロードできるようになります
こちらが出力されたサイトマップ
あとはサーバーの所定の場所にアップロードして終了
URL解析くらいなら自作できそうなのでこのサイトを参考にゆくゆくはサイトマップを自動生成したいですね
今更ながらPHPで日付形式に変換
日付を日付形式(yyyy/mm/dd)で画面に表示する画面を作ることになりました。
よくある話なので何をいまさらですが・・・
20170226という文字列を取得してそれを2017/02/26という形式にして画面に表示することにします。
<?php // 文字列を任意の日付形式に変換して出力 echo date('Y/m/d', strtotime("20170226")); ?>
- strtitimeで文字列を日付型に変換する
- dateでフォーマット指定
これで2017/02/26と出力されます。
ブラウザに出力するならスラッシュが特殊文字なので下記の方がよいかもです。
|
AZ Screen Recorderで録画した動画から画像を抜き出す
現在プレイ中のスマホのゲームのプレイ動画を録画してみました。
録画した動画から画像を抜き出してブログにアップしようといろいろ調査してみました。
画像の抽出
画像を抜き出すためにAvidemuxというアプリを使いました。
AviUtil使おうかと思いましたが、デフォルトではmp4に対応していなかったのでAvidemuxを選択しました。
日本語化できるようですが、直感で使えそうだったので英語のまま使いました。
File → Openで動画を選択すると動画が読み込まれます。
後は抜き出したい箇所に移動して
File → Sava as Image→Save as BMP(JPEG)で画像が出力されます
上下がかなり空いているのはAZ Screen Recorderで録画中にスマホを傾けたから・・・
画像の切り出し
トリミングしたいのですが、アップしたい画像が20枚ほどあるので手動でトリミングするのは面倒
ということで複数画像を一括してトリミングできるIrfanViewを使用しました。
こちらも日本語化しなくても使えそうなので英語のままです
File → Openで画像を開いて切り取りたい部分を選択します
File → Batch Conversion/Rename
Use advanced optionsにチェックをいれてAdvancedボタンをクリック
CROPにチェックを入れてGet current selボタンをクリックすると選択したエリアの座標が設定されます
元の画面に戻って出力先と読み込む画像を選択
Start Batchボタンをクリック
指定した出力先に編集された画像が出力されました
そしてこちらが実際の画像
AZ Screen Recorderで録画する時に傾きに注意して録画しようと思いました。