この配列の作成/印刷にはどのような問題がありますか?

この配列の作成/印刷にはどのような問題がありますか?

特定のファイルを生成するのにかかる平均時間を見つけるには、この分配列を使用してから、単にbash算術を使用して平均を見つけます。しかし、最初の要素のペアを除いて、違いはわかりません。これはl合計の減算配列です。何が起こっているのでしょうか?i++i

MMarray=(`ls -lrt /some/location/ |tail -57|head -55|tr -s " "|cut -d" " -f8|cut -c4,5`)
arrLen=`echo ${#MMarray[@]}`

for((i=0;i<$arrLen;i++))
do
    x=$(($i+1))
    j=${MMarray[x]#0}
    k=${MMarray[i]#0}
    l=($(($j-$k)))
    echo ${l[$i]}
done

そして02-59減算はどのように処理しますか?

ベストアンサー1

時間が1時間を超えないことを知っていれば、結果が負の数であれば、単に60を足すだけです。しかし、これはとにかく解決策ではありません。私はいくつかの点を指摘したいと思います:

  1. lsの出力、特に時間部分を解析しないでください。これはロケールによって異なり、完全に予測不可能な結果を​​生成する可能性があります。
  2. 日付を引くことができれば、なぜ時間が分のように約1時間であると仮定しますか? Unixタイムスタンプを使用 - 世界が作成されてから(1970年)秒単位の時間。これが時間を保存する標準的な方法です。
  3. ただ書いてlet i++let l=j-k何百万もの括弧を使用しないでください。
  4. $l長さ 1 の配列を作成し、次の$iメンバーにアクセスします。これが最初のペアでのみ機能する理由です。
  5. あなたは非常にCに似たプログラミングスタイルを使用しています。フォームのループを使用しfor i in "${MMarray[@]}"; do...て前のループを保存します。
  6. あまりにも多くの配列とループを使用しているので、すべての操作を日付ストリームで実行する方がはるかに優れています。したがって、ほとんどすべてを書き換えることができます。
  7. 平均時間は、最初のマイナス最後のマイナスをファイル数マイナス1(差数)で割ったことを知っていましたか?あえて引く必要もなく、加える必要もなく...

すべての時間差を秒単位(1行に1つ)で取得するにはどうすればよいですか?

find /some/location -type f -name '*your filter which files you want*' -printf '%T@\n' | sort -n | awk 'NR>1 { print  $1-previous } {previous = $1}'

それは何ができますか?findファイルを探してUnixタイムスタンプを印刷します。指定しないと、-nameすべての内容がリストされます。-type fディレクトリはなく、ファイルのみを表します。sort -n時間を数字で並べ替えます。awk違いを計算して印刷するだけです。

一般的に言えば、最初の日付と最後の日付だけを維持してください。たとえば、現在のディレクトリのすべてのファイルに対して、次のようにします。

find . -type f -printf '%T@\n' | sort -n | awk 'NR==1 { first = $1 } END{ print ($1-first)/(NR-1) }'

結果は秒単位の10進数ですが、整数または分だけint(($1-first)/(NR-1))簡単に書き込むint(($1-first)/(NR-1))/60ことができます。

おすすめ記事