2017-05-12 60 views
0

我想採用以下製表符分隔的輸入並將字段4和5中的持續時間中的天數修改爲Excel友好的持續時間,無論是HH:MM:SS還是理想的秒數。這些字段可以測量從00:00:00到數百天的正常運行時間。
輸入:使用sed或awk將「days hh:mm:ss」字段轉換爲hh:mm:ss或秒

<ip-address> field(2/2) field:(3:3) 2 days 18:18:27 23:23:57   n kB n GB 
<ip-address> field(2/2) field:(3:3) 18:18:27   23:23:57   n kB n GB 
<ip-address> field(2/2) field:(3:3) 18:18:27   2 days 23:23:57 n kB n GB 
<ip-address> field(2/2) field:(3:3) 2 days 18:18:27 21 days 23:23:57 n kB n GB 

希望的輸出爲第一個記錄,任一:

<ip-address> field(2/2) field:(3:3) 66:18:27   23:23:57   n kB n GB 
<ip-address> field(2/2) field:(3:3) 2387027   84237    n kB n GB 

當文件是製表符分隔的有七個字段;如果使用製表符,空格和:進行分隔,則它更像是30.字段2和3較長,但大致與所示的複雜程度相同。

使用的sed我可以創造一個表達,但不知道如何評價很到位:

sed "s/\([0-9]\+\) days \([0-9]\+\)/\1*24+\2/g" file 
<ip-address> field(2/2) field:(3:3) 2*24+18:18:27  23:23:57 n kB n GB 

我知道戰略經濟對話的評估方法,但它傳遞的整個模式空間回外殼

sed "s/\([0-9]\+\) days \([0-9]\+\)/\1*24+\2/e" file 
<ip-address> is not recognised as an internal or external command yada yada 

我知道如何在awk表達式hrs = $2 * 24 + $3中使用字段,但在這種情況下,該字段需要先拆分。將該行分割成30個字段似乎不值得。

有沒有辦法在awk中拆分字段,然後評估組件上的表達式,或在sed中評估上面的表達式,或者以其他方式?

在Win7上使用Gnu sed和awk。目前沒有bc,除非它是引人注目的,否則寧願避免。

編輯:澄清天在任何領域是可選的。

回答

2

awk來救援!

awk 'BEGIN {FS=OFS="\t"} 
      {split($4,d," days "); 
      split(d[2],t,":"); 
      h=d[1]*24+t[1]; 
      $4=h":"t[2]":"t[3]; 
      print; 
      $4=(h*60+t[2])*60+t[3]}1' file 

<ip-address> field(2/2) field:(3:3) 66:18:27 23:23:57 n kB n GB 
<ip-address> field(2/2) field:(3:3) 238707 23:23:57 n kB n GB 
+0

很好。我編輯了我的原始帖子,以澄清那些日子可能出現在任何一個領域,只需要一個輸出行。我發現(所以不必問)尾部1導致第二個打印很容易修改。以這種方式處理4美元和5美元的最佳方式是什麼,並且在任何一個領域中處理「天」的缺失?我在想'awk'BEGIN {}/days/in $ 4 * {split($ 4 ...)/ days/in $ 5 * {split {$ 5 ...}''(* somehow ...) – gloopy

+0

在這種情況下,兩個字段需要相同的處理... – karakfa

+0

我現在的解決方案是:'awk'BEGIN {FS = OFS =「\ t」} $ 4〜/ day [s]?/ {split($ 4 ,d,「day [s]?」); split(d [2],t,「:」); h = d [1] * 24 + t [1]; $ 4 = h「:」t [2] 「:」t [3]} $ 5〜/ day [s]?/ {split($ 5 ...} 1'file' - 結果是1天的正常運行時間xx:xx:xx。正則表達式使轉換複雜化考慮一個函數,在腳本中省略了Windows'\「'轉義字符以清晰起見,謝謝! – gloopy

相關問題