我有一个很大的 txt 文件空间,我将其分成 18 个较小的文件(每个文件都有自己的列数)。这种分割基于分隔符,即每当时间戳达到午夜时。如此有效地,我最终会得到 18 个以下形式的文件(注意,忽略破折号和管道,我使用它们来提高可读性):
文件1
time ----------- valueA - valueB
12:00:00 AM | 54.13 | 239.12
12:00:01 AM | 51.83 | 119.93
..
Run Code Online (Sandbox Code Playgroud)
文件18
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
..
Run Code Online (Sandbox Code Playgroud)
分割文件后,我会使用 AWK 对每个文件执行一些处理,因此简而言之,有两个阶段:“分割阶段”和“处理阶段”。
不幸的是,大 txt 文件中包含的时间戳采用两种格式之一。理想的 24 小时格式“00:00:01”或不理想的 12 小时格式“12:00:01 AM”。
因此,我试图将所有格式转换为 24 小时,但我不知道如何执行此操作。我也不确定是否要在分割阶段使用 bash 尝试此操作,还是在进程阶段使用 AWK 尝试此操作。我知道以下函数将 12 小时转换为 24 小时
'date --date="12:00:01 AM" +%T'
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何将其合并到我的 shell 脚本中,如果我在“分割阶段”使用“while read line”,或者我是否应该在“处理阶段”在 AWK 中进行时间转换(如果可能?)阶段'。
看看下面的测试,对你有帮助吗?
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 }'
Run Code Online (Sandbox Code Playgroud)
输出
00:00:00| 54.92 | 239.12 | 231.23 | 882.12
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6096 次 |
最近记录: |