シェルスクリプトの要約統計

シェルスクリプトの要約統計

複数のディレクトリに複数のファイル(レコード)があります。各レコードは、作成日に基づいて独自のパスにあります。

たとえば、2016年11月12日の記録は次のとおりです。

~/records/2016/11/12/record.

各レコードの最後の行には数字があり、各年の要約統計を計算しようとしています。

2人のユーザーからの入力を必要とするスクリプトを作成するには:

  • 年度
  • 統計

統計が平均、最大、最小、または全体(平均、最大、最小)である場合はどこですか?

答え1

year入力を使用してすべてのファイルを検索し、各ファイルに対して呼び出されるコマンドが呼び出されるルートディレクトリを定義できます。findrecordtail -1

find ~/records/"$YEAR" -type f -name record -exec tail -1 {} \;

これは、特定の年のすべての値を印刷するのに十分です。

最小/最大/平均を計算し、出力をawk計算に適用します。

awk -v stat="$STATISTICS" 'BEGIN { count=0; sum=0; }
  { if(!count) { min=$0; max=$0; }
    count++;
    sum += $0;
    if($0 > max) max = $0;
    if($0 < min) min = $0;
  }
  END {
    if(count) {
      # TODO: use variable "stat" to select only one result to print
      print min;
      print sum/count; # average
      print max;
    } else {
      print "no data";
    }
  }'

これらのフラグメントを組み合わせて拡張して、完全なスクリプトを取得できます。

関連情報