.................................................
<< 11年07月 >>
26 27 28 29 30 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31


最近のコメント
10/07 北本
09/29 拝承
07/28 北本
07/20 ばてれん
10/26 北本
.............................
何となくリンク
.............................

2020年
02月
05月
2019年
04月 05月
08月 09月
2018年
01月 02月 03月
04月 05月 06月
09月
10月
2017年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2016年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2015年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2014年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2013年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2012年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2011年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2010年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2009年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2008年
01月 02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月
2007年
02月 03月
04月 05月 06月
07月 08月 09月
10月 11月 12月

レスを書き込みます




iconvコマンド 2011年7月1日(金)21時35分
分類:マメ知識 [この記事のURL]

今週は、とある障害がキッカケで大変で御座いました。
土曜の夜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の存在で、一気に問題を解決できかなり盛り上がりました。
いやーまだまだ便利なコマンドがあるものですね。


nik5.144