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,除非它是引人注目的,否則寧願避免。
編輯:澄清天在任何領域是可選的。
很好。我編輯了我的原始帖子,以澄清那些日子可能出現在任何一個領域,只需要一個輸出行。我發現(所以不必問)尾部1導致第二個打印很容易修改。以這種方式處理4美元和5美元的最佳方式是什麼,並且在任何一個領域中處理「天」的缺失?我在想'awk'BEGIN {}/days/in $ 4 * {split($ 4 ...)/ days/in $ 5 * {split {$ 5 ...}''(* somehow ...) – gloopy
在這種情況下,兩個字段需要相同的處理... – karakfa
我現在的解決方案是:'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