
No.2ベストアンサー
- 回答日時:
ログが複数行あるとして、
開始時刻,終了時刻 テキスト
を
開始時刻,終了時刻,経過時間 テキスト
に書き換えることを考えるとします。かなり面倒ですが、↓
#! /bin/sh
IFS=" :.,"
while read H1 M1 S1 T1 H2 M2 S2 T2 TEXT
do
X=`expr $H1 \* 3600000 - $M1 \* 60000 - $S1 \* 1000 + $T1`
Y=`expr $H2 \* 3600000 + $M2 \* 60000 + $S2 \* 1000 + $T2`
if test $X -gt $Y ;then Y=`expr $Y + 86400000`;fi
W=`expr $Y - $X`
T=`expr $W % 1000`
W=`expr $W / 1000`
S=`expr $W % 60`
W=`expr $W / 60`
M=`expr $W % 60`
H=`expr $W / 60`
T=`expr 00$T : '.*\(...\)'`
S=`expr 0$S : '.*\(..\)'`
M=`expr 0$M : '.*\(..\)'`
H=`expr 0$H : '.*\(..\)'`
IFS=" "
echo "$H1:$M1:$S1.$T1,$H2:$M2:$S2.$T2,$H:$M:$S.$T $TEXT"
IFS=" :.,"
done < logfile.txt >logfileout.txt
この回答へのお礼
お礼日時:2005/06/18 00:20
ご回答ありがとうございます。
やはりコマンド一発で実行するのは無理っぽいですね。
簡単な処理を複数組み合わせてシェルを作成するの方法が一番よいですね。
ありがとうございます。大変参考になりました。
No.1
- 回答日時:
簡単なコマンドしか知らないので、シンプルなコマンドで単純に考えました。
1秒=1000ミリ秒
1分=60秒=60000ミリ秒
1時間=60分=3600秒=3600000ミリ秒
ログファイル(time.log)内には、質問文内の例にあった「開始」「終了」時間のみが記述されているとしました。
「cut」コマンドで開始・終了の区切り文字を「,」、時・分・秒の区切り文字を「:」、ミリ秒の区切り文字を「.」としました。
ちなみに、23時→0時の日付またがりは考慮していません。
以下、Cシェル
#!/bin/csh
#--------------------------------------------
# ログファイルより、開始・終了時間を取り出す
#--------------------------------------------
set START = `cat time.log | cut -d',' -f1`
set END = `cat time.log | cut -d',' -f2`
#--------------------------------------------
# 取り出した開始時間を、時・分・秒・ミリ秒に切り分ける
#--------------------------------------------
set START_HH = `echo ${START} | cut -d':' -f1`
set START_MM = `echo ${START} | cut -d':' -f2`
set START_SS = `echo ${START} | cut -d':' -f3 | cut -d'.' -f1`
set START_MS = `echo ${START} | cut -d'.' -f2`
#--------------------------------------------
# 切り分けた時・分・秒・ミリ秒をすべてミリ秒に置き換える
#--------------------------------------------
@ START_HH_MS = ${START_HH} \* 3600000
@ START_MM_MS = ${START_MM} \* 60000
@ START_SS_MS = ${START_SS} \* 1000
#--------------------------------------------
# 置き換えた時・分・秒・ミリ秒の和をもとめる
#--------------------------------------------
@ START_TOTAL = ${START_HH_MS} + ${START_MM_MS} + ${START_SS_MS} + ${START_MS}
~~ END_TOTAL も同様に ~~
#--------------------------------------------
# 終了時間-開始時間で、実行時間をもとめる
#--------------------------------------------
@ ELAPS_MS = ${END_TOTAL} - ${START_TOTAL}
~~ これで実行時間のミリ秒がでる ~~
~~ 秒単位にする場合は、更に1000で割る ~~
どうでしょうか?理屈が簡単な分、処理が多いのが難点です。実はコマンド1発で答えがでたりするかも…。でも、自分の持っている知識だと、この回答が精一杯です。
この回答へのお礼
お礼日時:2005/06/18 00:16
ご回答ありがとうございます。
この方法でやれば、処理が簡単なのですぐ作成できそうです。大変参考になりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VirtualBox 6.1 → 7.1 でUbuntu...
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
ubuntuのシャットダウンが進ま...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
「トゥ]の出し方
-
WinSCPでLinux(CentOS6.10)に...
-
インストールできないですどう...
-
Windowsのローカルディレクトリ...
-
ubuntuで デイスク/deb/loopと...
-
Ububtuでファイル共有できない...
-
WineのRufusでデバイスを検知す...
-
lubuntuのインストールが終わり...
-
AWSでSSH接続をしたいのですが...
-
Ubuntu on Xorgのログインについて
-
ubuntu 22日本語Remixのisoイメ...
-
ubuntu 24 へのCanon 複合機ス...
-
プロジェクタに背景しか映らない
-
windowsxpと同じくらい軽いLinu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
実行中のシェルスクリプト自体...
-
OSがプログラムをどのように実...
-
UNIX Cシェルで実数の比較
-
デフォルトシェルの調べ方
-
cshの標準出力を制御したい
-
Bシェルでパイプ→exitがうまく...
-
telnet へのパイプができないです
-
Shellのパターンマッチについて
-
FTPコマンドの戻り値について
-
diskpart でパーティションの一...
-
Bシェル内でのユーザー変更
-
IFS変数について詳しい方教えて...
-
シェルの実行について
-
cygwinシェルスクリプト内での...
-
csh(Cシェル)のevalに関して
-
cshで変数名の入れ子ができない
-
vagrant upでエラーが表示され...
-
cronでftp自動転送を行いたい
-
Mac OSXのターミナルでemacsを起動
おすすめ情報