如何修改栏目时间格式

问题描述 投票:0回答:1

我有几个文件的一列中包含日期时间,我正在尝试将时间从“%hh.%nn.%ss”更改为“%hh:%nn:%ss”。 困难在于 TIME 列的位置根据文件而变化 例子

1-File 1:
22;23243;1;2013-08-23-15.46.34;

2- File 2 :
0000054;0000001;00496999999;0000;2012-02-29-13.40.18;001

谢谢你

unix命令中的sed解决问题

unix awk sed
1个回答
0
投票

困难在于 TIME 列的位置会根据情况而变化 在文件示例中

您需要启发式来确定给定的列是否包含TIME,考虑到您的示例输入,我将按照以下方式利用GNU

AWK
,让
file.txt
内容为

22;23243;1;2013-08-23-15.46.34;
0000054;0000001;00496999999;0000;2012-02-29-13.40.18;001

然后

awk 'BEGIN{FS=OFS=";"}{for(i=1;i<=NF;i+=1){if($i~/\y[0-9][0-9][.][0-9][0-9][.][0-9][0-9]\y/){gsub(/[.]/,":",$i)}};print}' file.txt

提供输出

22;23243;1;2013-08-23-15:46:34;
0000054;0000001;00496999999;0000;2012-02-29-13:40:18;001

解释:我通知 GNU

AWK
字段分隔符 (
FS
) 和输出字段分隔符 (
OFS
) 都是分号,然后对于每一行,如果给定列包含看起来像这样的子字符串,我使用
for
循环遍历字段TIME 然后我将其中所有
.
替换为
:
。所述子字符串是整个单词
dd.dd.dd
,其中
d
是数字,
.
是点,
\y
单词边界,并防止对具有比 TIME 合法数字更多的数字的子字符串做出反应,例如
130.00.00
,观察到
.
在正则表达式中具有特殊含义,所以我使用
[.]
,这意味着文字点。

(在 GNU Awk 5.1.0 中测试)

© www.soinside.com 2019 - 2024. All rights reserved.