
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
ご回答ありがとうございます。
やはりコマンド一発で実行するのは無理っぽいですね。
簡単な処理を複数組み合わせてシェルを作成するの方法が一番よいですね。
ありがとうございます。大変参考になりました。
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発で答えがでたりするかも…。でも、自分の持っている知識だと、この回答が精一杯です。
ご回答ありがとうございます。
この方法でやれば、処理が簡単なのですぐ作成できそうです。大変参考になりました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表計算ソフトcalcにおいて、1時間10分を1.1と表記する方法とそれらを集計する方法は? 4 2022/04/06 16:54
- その他(開発・運用・管理) 時間給の計算方法をお教えください 2 2022/06/01 12:21
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- Excel(エクセル) 【スプレッドシート】日報を統合して各業務の所要時間をピボットで表示したい 1 2023/07/06 16:49
- その他(ソフトウェア) F-BASICで計算中の実行が中途で勝手に止まり、大変困っています。 2 2023/03/02 16:15
- 物理学 二つの光時計 2 2022/06/02 16:32
- その他(生活家電) 溶接機の消費電力計算方法について 1 2023/08/23 15:57
- Excel(エクセル) Excel 時間の引き算でマイナスを表示させることは出来ますか 3 2023/06/14 21:54
- その他(ビジネス・キャリア) 日報の実務労働時間の集計について困っています。 2 2023/06/09 19:00
- 英語 提示文の仮定法が、時制の影響を受けていない理由について 10 2022/05/21 15:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
diskpart でパーティションの一...
-
Mac OSXのターミナルでemacsを起動
-
carbon化ってなんですか?
-
lsコマンドの色設定が反映されない
-
scpコマンドでリモートサーバの...
-
atコマンドによるスケジュール...
-
Viで書き込もうとすると、保...
-
1回のssh命令でサーバファイル...
-
cactiでグラフが表示されない
-
DOSコマンドでのワイルドカ...
-
CentOSでのCDマウントがうまく...
-
メールサーバの/var/spool/mail...
-
Red Hat Linux 9でcd-romをマウ...
-
/ が何時の間にか「Read-only f...
-
SUID(Set UID)属性の使い方につ...
-
Warning: Output is not to
-
【ターミナル】MacBookにディー...
-
[linux command] | と > の違い...
-
起動時にncr53c8xxモジュールの...
-
ddコマンドでWindowsマシンのイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
実行中のシェルスクリプト自体...
-
FTPコマンドの戻り値について
-
lsコマンドの色設定が反映されない
-
ping -cコマンドで指定した個数...
-
diskpart でパーティションの一...
-
cshで変数名の入れ子ができない
-
csh(Cシェル)のevalに関して
-
cygwinシェルスクリプト内での...
-
シェルスクリプトからPHP実行
-
carbon化ってなんですか?
-
cshの標準出力を制御したい
-
シェルの実行について
-
シェルスクリプトで困っていま...
-
シェルスクリプト(if文)
-
シェルの -eq の動作について
-
cronでftp自動転送を行いたい
-
Mac OSXのターミナルでemacsを起動
-
Bシェルでパイプ→exitがうまく...
-
telnet へのパイプができないです
おすすめ情報