logfmtには、次の行を含むログファイルがあります。
duration=38.924266437s job=267842 project=507
duration=38.924266437s job=267842 project=507
duration=2m56.408984141s job=267850 project=745
duration=2m56.408984141s job=267850 project=745
duration=3m38.211342699s job=267846 project=173
duration=3m38.211342699s job=267846 project=173
duration=3m38.690043053s job=267843 project=173
duration=3m38.690043053s job=267843 project=173
...
期間値を測定単位(秒または分)にどのように変換しますか?
ベストアンサー1
使用awk
:
awk -F'[= ]' '{
n=split($2, a, "m")
sub($2, sprintf("%.9f", (n==1 ? a[1] : 60*a[1]+a[2])))
}1' file
出力:
duration=38.924266437 job=267842 project=507
duration=38.924266437 job=267842 project=507
duration=176.408984141 job=267850 project=745
duration=176.408984141 job=267850 project=745
duration=218.211342699 job=267846 project=173
duration=218.211342699 job=267846 project=173
duration=218.690043053 job=267843 project=173
duration=218.690043053 job=267843 project=173
=
フィールド区切り記号を使用する$2
ターゲット文字列(たとえば)が含まれます38.924266437s
。- 文字列の2番目のフィールドを配列の長さである
m
arrayにa
分割します。n
- 新しい値の計算:そうであれば
n
最初1
の配列値(秒)を使用し、そうでない場合は2つの配列値に基づいて秒を計算します。 - 2番目のフィールドを浮動小数点形式の計算値に置き換えます。
- 履歴を印刷します。