Bash和awk:将字段从12小时转换为24小时制

时间:2011-11-10 17:47:54

标签: bash awk

我有一个大的txt文件空间分隔,我将其拆分为18个较小的文件(每个文件都有自己的列数)。这种分割基于分隔符,即每当时间戳到达午夜时。如此有效,我最终将以18个文件的形式结束(注意,忽略破折号和管道,我用它们来提高可读性):

file1

time ----------- valueA - valueB  
12:00:00 AM |      54.13 | 239.12  
12:00:01 AM |      51.83 | 119.93  
..  

file18

time ---------- valueA - valueB - valueC - valueD  
12:00:00 AM |      54.92 | 239.12  | 231.23  | 882.12  
12:00:01 AM |      23.92 | 121.92  | 201.23  | 892.12   
..  

一旦我拆分文件,然后使用AWK对每个文件执行一些处理,所以简而言之,“拆分阶段”和“处理阶段”分为2个阶段。

不幸的是,大型txt文件中包含的时间戳是2种格式之一。优选的24小时格式“00:00:01”或不合需要的12小时格式“12:00:01 AM”。

因此,我正在尝试将所有格式转换为24小时,我不知道该怎么做。我也不确定是使用bash在分裂阶段还是在使用AWK的过程阶段尝试此操作。我知道以下功能将12小时转换为24小时

'date --date="12:00:01 AM" +%T'

然而,我不知道如何将这个结合到我的shell脚本中我是在'拆分阶段'使用'读取行'时是否应该在AWK中进行时间转换(如果可能的话?)at '处理阶段'。

1 个答案:

答案 0 :(得分:3)

请参阅下面的测试,对您有帮助吗?

 kent$  echo "12:00:00 AM |      54.92 | 239.12  | 231.23  | 882.12  "\
|awk -F'|' 'BEGIN{OFS="|"}{("date --date=\""$1"\" +%T") |getline $1;print }'

<强>输出

 00:00:00|      54.92 | 239.12  | 231.23  | 882.12