AWK将分钟和秒转换为仅秒

时间:2015-06-14 05:59:52

标签: linux 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

3 个答案:

答案 0 :(得分:5)

只需添加检查记录是否包含秒和分钟

awk -F: 'NF==1; NF==2{seconds=($1*60);seconds=seconds+$2;print seconds}'
  • NF每条记录(行)中的字段数。

  • NF==1如果它只包含一个字段,我们就不会做任何计算。请注意,此检查没有{action}部分。因此awk执行默认操作以打印整行

  • NF==2如果字符串包含2个字段,则为真。采取相关操作,执行计算。

<强>测试

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

答案 1 :(得分:1)

$ awk -F: '{print (NF-1)*$1*60 + $NF}' file
49.8
63.4
61
60.4
61

答案 2 :(得分: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
相关问题