2015-06-14 106 views
0

我有一個文件,我試圖轉換成幾秒鐘。它看起來像這樣:AWK轉換分秒僅秒

49.80 
1:03.40 
1:01.00 
1:00.40 
1:01.00 

我已經試過:

awk -F: '{seconds=($1*60);seconds=seconds+$2;print seconds}' file 

,輸出:

2988 
63.4 
61 
60.4 
61 

我也試過:

sed 's/^/:/g' file | awk -F: '{seconds=($2*60);seconds=seconds+$3;print seconds}' 

,它輸出結果相同。我想獲得這些結果:

49.80 
63.4 
61 
60.4 
61 

回答

5

只需添加一個檢查,如果記錄同時包含秒和分

awk -F: 'NF==1; NF==2{seconds=($1*60);seconds=seconds+$2;print seconds}' 
  • NF每個記錄(行)字段數。

  • NF==1如果它只包含一個字段,我們不會做任何計算。看到沒有{action}部分與此檢查相關聯。因此,awk執行缺省操作以打印整行

  • NF==2如果字符串包含2個字段,則爲true。採取執行計算的相關操作。

測試

$ awk -F: 'NF==1; NF==2{seconds=($1*60);seconds=seconds+$2;print seconds}' file 
49.80 
63.4 
61 
60.4 
61 
+0

謝謝nu11p01 *,這就是我所需要的。 –

0

最後一列在您的冒號分隔的列表被秒了,下一個到最後是分擺在他們面前的是柱小時(之前雖然沒有提及)。這個結構我投入代碼:

awk -F':' '{print (NF>2 ? $(NF-2)*3600 : 0) + (NF>1 ? $(NF-1)*60 : 0) + $(NF)}' 

它檢查是否有足夠的列(如NF>1),然後將其值(例如$(NF-1)*60甚至0)。

測試:

> awk -F':' '{print $0": "(NF>2?$(NF-2)*3600:0)+(NF>1?$(NF-1)*60:0)+$(NF)}' 
49.80: 49.8 
1:03.40: 63.4 
1:01.00: 61 
1:00.40: 60.4 
1:01.00: 61 
23:14:12.1: 83652.1 
1
$ awk -F: '{print (NF-1)*$1*60 + $NF}' file 
49.8 
63.4 
61 
60.4 
61 
+1

好的(+1),這會被接受 –