Logs

如何將日誌(使用 logfmt 格式)中的混合分鐘和秒持續時間值轉換為一致的單位?

  • January 27, 2021

我在 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
...

如何將持續時間值轉換為一種類型的度量單位(秒或分鐘)?

使用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
  • 使用=and作為欄位分隔符,第二個欄位$2包含目標字元串,例如38.924266437s.
  • 將 string 上的第二個欄位拆分m為 array an是數組的長度。
  • 計算新值:如果n1,則使用第一個數組值(秒數),否則從兩個數組值計算秒數。
  • 將第二個欄位替換為格式化為浮點數的計算值。
  • 列印記錄。

引用自:https://unix.stackexchange.com/questions/631112