.................................................
.............................
何となくリンク
.............................
|
|
|
今週は、とある障害がキッカケで大変で御座いました。
土曜の夜02:30頃に障害コール、6時間掛けてリカバリ。
以降、毎日0時過ぎに事前確認というハードな日々。
と言っても月曜日からは待機別の人になったので、夜確認は2日だけでしたが。
そんな中、ファイルに含まれる日本語のキーワードを探すというアクションが必要になりました。
ファイルは大量にあり、○月○日 ○時に作成されたファイルの何れかに
○○という文字が含まれている。そのファイルが何かを探す必要がある。
更にOSの環境はEUC、ファイルはUTF-8という状況。
単純に grep "○○"とやったら、文字コードが違うのでヒットしない。
またgrepは、ヒットしたファイル名が解らない為、
どのファイルでヒットしたのかの確認も必要。
まぁこれはxargs moreでやれば良いって直ぐ解るんですが、
問題はEUCとUTF-8の連携でした。
ターミナルソフトの文字コードをUTF-8にすれば、
grep検索が出来ますが、ファイルのタイムスタンプである
○月○日という日本語は文字化けする為、この文字列でのgrepができない。
Solarisのfindコマンドは、1日単位でしか指定できないので駄目。
euctojp、sjtoeucなど、EUC⇔SJIS変換のコマンドはあるが、UTFはどうもないっぽい。
nkfはLinuxでしか使えず、さて困ったという状況の中、
iconvというコマンドの存在を知りました。
ロケールの仕組みにのっとった正統派文字コード変換コマンドらしいです。
実際にどうやって上記を実現したかと言うと、
まずターミナルソフトはEUCに設定します。これで送受信はEUCになる。
7月1日 10時台に作成されたファイル(*.log)に"拝承"という文字列があるとします。
このファイルがどこにあるかを探すには‥‥
ls -l *.log | grep "7月 1日 10" | awk '{print $9}' |
xargs more | iconv -f UTF-8 -t eucJP | egrep "拝承|log$"
※レイアウトの都合上改行してますが本来は1行で実行
とやれば実現できます。
iconvの存在で、一気に問題を解決できかなり盛り上がりました。
いやーまだまだ便利なコマンドがあるものですね。
|
|
|