ログの分と秒の混合期間の値(logfmt形式を使用)を一貫した単位に変換するには?

ログの分と秒の混合期間の値(logfmt形式を使用)を一貫した単位に変換するには?

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番目のフィールドには$2ターゲット文字列(たとえば)が含まれます38.924266437s
  • 文字列の2番目のフィールドを配列の長さであるmarrayにa分割します。n
  • 新しい値の計算:そうであればn最初1の配列値(秒)を使用し、そうでない場合は2つの配列値に基づいて秒を計算します。
  • 2番目のフィールドを浮動小数点形式の計算値に置き換えます。
  • 履歴を印刷します。

おすすめ記事