プロが教えるわが家の防犯対策術!

時刻フォーマットの編集方法について
教えてください。

以下の様な時刻(CLF の時刻の書式)を
YYYYMMDDの形に変更したいのですが
何かいい案を頂けないでしょうか?
--------------------
26/Mar/2005:18:22:15 +0900
--------------------

可能ならば、Linuxのコマンド(awkコマンド等)で
行いたいのですが、JAVAなどでコーディングしないと駄目でしょうか??

※具体的にいえば、Apacheが出力しているログ内の
 日付書式をYYYYMMDDの形で取得したいのです。

A 回答 (3件)

単にコマンドオプションでこれじゃだめ?


date +%H%I%k
けど試した無いのでオプションの自信なしmanを見て
    • good
    • 0

apacheのログだと4カラム目ですね。


[09/Mar/2006:01:55:47 +0900]

awk 'BEGIN{M["Jan"]="01";M["Feb"]="02";中略;M["Dec"]="12"}
{DD=substr($4,2,2);MM=M[substr($4,5,3)];YYYY=substr($4,9,4)
$4="[" YYYY MM DD substr($4,13);print}' access_log >access_log.out
    • good
    • 0
この回答へのお礼

ありがとうございます!
スバリ求めていたものでした。

本当に助かりました。

お礼日時:2006/03/10 10:33

日付部分のスラッシュと日付と時刻の間のコロンをスペースに置き換えて date コマンドの -d オプションに引き渡せば date コマンドのフォーマット出力によって作ることができます。



echo '26/Mar/2005:18:22:15 +0900' | sed -e 's#/# #g' -e 's/:/ /' | xargs -i date +'%Y%m%d' -d {}

これで 20050326 が出力されます。

bash のスクリプト中でシェル変数に代入したい場合は d=$(...) か d=`... ` のように書けばできます。

例) 元の日時の文字列が s に入っていて、それを変換して d に代入する場合

# 元
s='26/Mar/2005:18:22:15 +0900'

# シェル変数 d に結果を代入
d=$(echo "$s" | sed -e 's#/# #g' -e 's/:/ /' | xargs -i date +'%Y%m%d' -d {})

# 出力
echo $d
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!