• ベストアンサー

時刻フォーマットの編集

時刻フォーマットの編集方法について 教えてください。 以下の様な時刻(CLF の時刻の書式)を YYYYMMDDの形に変更したいのですが 何かいい案を頂けないでしょうか? -------------------- 26/Mar/2005:18:22:15 +0900 -------------------- 可能ならば、Linuxのコマンド(awkコマンド等)で 行いたいのですが、JAVAなどでコーディングしないと駄目でしょうか?? ※具体的にいえば、Apacheが出力しているログ内の  日付書式をYYYYMMDDの形で取得したいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

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

jaHunt
質問者

お礼

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

その他の回答 (2)

回答No.3

日付部分のスラッシュと日付と時刻の間のコロンをスペースに置き換えて 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

noname#17587
noname#17587
回答No.1

単にコマンドオプションでこれじゃだめ? date +%H%I%k けど試した無いのでオプションの自信なしmanを見て

関連するQ&A