
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cshで変数名の入れ子ができない
-
Linuxのシェルスクリプトをお客...
-
cshの標準出力を制御したい
-
FTPコマンドの戻り値について
-
複数の処理を順番にログアウト...
-
Bシェル内でのユーザー変更
-
scpコマンドでリモートサーバの...
-
Viで書き込もうとすると、保...
-
/ が何時の間にか「Read-only f...
-
Windows10のRegSys32に登録され...
-
DOSコマンドでのワイルドカ...
-
~/.bashrcを間違えて保存してし...
-
Illustratorのデータをまとめて...
-
IBM漢字コードのSJIS変...
-
AIX ksh利用 grep 検索で マ...
-
/etc/passwd と /etc/shadowを...
-
メールサーバの/var/spool/mail...
-
kshのファイルが存在しない時
-
rcpコマンドについて、教えて!
-
Warning: Output is not to
マンスリーランキングこのカテゴリの人気マンスリー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を起動
おすすめ情報