Logs
如何將日誌(使用 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 ...
如何將持續時間值轉換為一種類型的度量單位(秒或分鐘)?
使用
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
為 arraya
,n
是數組的長度。- 計算新值:如果
n
是1
,則使用第一個數組值(秒數),否則從兩個數組值計算秒數。- 將第二個欄位替換為格式化為浮點數的計算值。
- 列印記錄。