Linux AWK将分和秒转换为仅秒

Linux AWK将分和秒转换为仅秒,linux,awk,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
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

只需添加一个检查,检查记录是否同时包含秒和分钟

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

只需添加一个检查,检查记录是否同时包含秒和分钟

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

冒号分隔列表中的最后一列是秒,最后一列是分钟,前面一列是小时(尽管前面没有提到)。我将这个结构放入代码中:

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 (NF>2 ? $(NF-2)*3600 : 0) + (NF>1 ? $(NF-1)*60 : 0) + $(NF)}'
它检查是否有足够的列(例如
NF>1
),然后获取其值(例如
$(NF-1)*60
,甚至
0

测试:


谢谢nu11p01*,这就是我需要的。谢谢nu11p01*,这就是我需要的。