長い変数文字列を含むログがあり、数値から最小、最大、平均を取得しようとしています。
文字列の例
date time from Time: 100 ms to status code:
date time Time: 1050 ms status code IP
date time IP Time: 2 ms status code destination
「Time:* ms」はすべての行で一定ですが、フィールドの位置は変わります。最大、最小、平均ミリ秒が必要です。
ベストアンサー1
GNU awkの使用FPAT
(正規表現(文字列)は、gawkに正規表現に一致するテキストに基づいてフィールドを生成するように指示します。"):
awk -v FPAT='Time:[[:blank:][:digit:]]+ms' '
{ split($1, tmp); sum+=tmp[2] }
NR==1 { min=max=tmp[2] }
min>tmp[2]{ min=tmp[2] }
max<tmp[2]{ max=tmp[2] }
END{ print min, max, sum/NR }' infile
出力;
2 1050 384