file.txt
以下の内容を含むファイルがあり、10000行を超えています。
Wed May 27 15:41:29 PDT 2020
Entering directory : /aaa/bbb/ccc
Wed May 27 15:42:30 PDT 2020
Entering directory : /aaa/bbb/ccc/ddd
Wed May 27 15:43:19 PDT 2020
Entering directory : /aaa/bbb/ccc/ddd/eee
Wed May 27 15:44:25 PDT 2020
Leaving directory : /aaa/bbb/ccc/ddd/eee
Wed May 27 15:45:37 PDT 2020
Leaving directory : /aaa/bbb/ccc/ddd'
Wed May 27 15:46:42 PDT 2020
Leaving directory : /aaa/bbb/ccc
私は何をすべきですか?
ディレクトリに入る前に、タイムスタンプに基づいてどのディレクトリがどれくらいの時間を費やしたかを印刷する必要があります。
出力は次のようになります。
_Directory_ : `/aaa/bbb/ccc`
_Time taken_ : `00:05:13`
このディレクトリのエントリー時間は次のとおりです。Wed May 27 15:41:29 PDT 2020
出発時間は次のとおりです。Wed May 27 15:46:42 PDT 2020
これにより視差が出力される。
同様に、他のインスタンスのディレクトリパスと時間差も印刷する必要があります。
フォーラムで検索して受け取るこれしかし、私の問題は完全に解決されていません。私はシェルスクリプトの専門家ではありませんが。したがって、誰かが私が出力を得るのを助けることができればいいでしょう。
ありがとう
ベストアンサー1
完全な答えではありませんが、sed文書を作成する場合
cat file.txt | sed -n 'N;l;D' | sed -n '/.*\/aaa\/bbb\/ccc\s*\$/p'
あなたは得るでしょう
Wed May 27 15:41:29 PDT 2020 \nEntering directory : /aaa/bbb/ccc $
Wed May 27 15:46:42 PDT 2020 \nLeaving directory : /aaa/bbb/ccc$
これは、関連するすべてのディレクトリ(ループオーバーが必要)へのフルパスを知っている場合に問題を単純化します。
経過時間を取得するための日付算術は不明ですが、上記から日付を抽出できる場合は、Unix時間(1970年1月1日以降の秒)に変換するのが開始かもしれません。例えば
date -d "Wed May 27 15:41:29 PDT 2020" +%s
与えられた
1590619289
したがって、スクリプトで日付を変数に入れることができる場合(文字通り入力します)
ENTERDATE="Wed May 27 15:41:29 PDT 2020"
LEAVEDATE="Wed May 27 15:46:42 PDT 2020"
そしてそれをunixtimeに変換します。
ENTERSECONDS=`date -d "$ENTERDATE" +%s`
LEAVESECONDS=`date -d "$LEAVEDATE" +%s`
次のように持続時間を秒単位で取得できます。
DURATION=$(($LEAVESECONDS - $ENTERSECONDS))
この場合、
313
日付算術をよりよくサポートするパッケージがあるかもしれません。
お役に立てば幸いです。