gpt4 book ai didi

regex - 在字符串中查找日期和时间并在 Windows 或 cmd 中使用 sed 重新格式化删除空格

转载 作者:可可西里 更新时间:2023-11-01 09:25:05 26 4
gpt4 key购买 nike

我想不出一个好的 sed、regex 或 windows cmd,或两者兼而有之,将 csv 文件中的行重新格式化为可用的东西:

给定:

Name,Equip1_SA-TEMP -- ASample,7/8/13   0:00,55.10

Name,Equip1_SA-TEMP -- ASample,7/8/13 0:10,55.50

我需要“找到”日期时间部分,例如(7/8/13 0:00) 并重新格式化为类似 SQL 的 DATETIME:

Name,Equip1_SA-TEMP -- ASample,2013-07-08 00:00:00,55.10

Name,Equip1_SA-TEMP -- ASample,2013-07-08 00:10:00,55.50

如您所见,这可能需要在月、日和小时前添加“0”,然后在秒前添加 :00。

获取日期时间区域是这样的:

sed -E 's#^([^/]+)/([^/]+)/([0-9]+)

,但我不能先“开始”...需要先找到第二个 ',' 吗?

每行总是有 4 个字段:

Name,SomeEquipmentId,DateTime,Value.

是否有 sed + windows cmds 的良好组合来获得这个?还是我最好编写更高级别的代码来完成这一切?

用 awk 更新:我尝试了一些命令,例如:awk -F , "{split($3,a,[:blank:]); vdate=a[1]; tdate=a[2]; print vdate}"file.csv

但它在 [ 字符上给出了语法错误。逃避它是行不通的。我尝试了\""%%3s,但仍然返回整个字符串(例如 7/18/13 00:10)。有没有更好的 awk 字符串命令可以使用而不是试图将它们分解成数组?

最佳答案

使用 GNU awk 的一种方式

awk '
BEGIN {
FS=OFS=","
}
{
split($3,ary,/[\/: ]/)
$3=mktime(20 ary[3]" "ary[1]" "ary[2]" "ary[6]" "ary[7]" "00)
$3=strftime("%F %T",$3)
}1' csvfile

测试:

$ cat csvfile 
Name,Equip1_SA-TEMP -- ASample,7/8/13 0:00,55.10
Name,Equip1_SA-TEMP -- ASample,7/8/13 0:10,55.50

$ awk '
BEGIN {
FS=OFS=","
}
{
split($3,ary,/[\/: ]/)
$3=mktime(20 ary[3]" "ary[1]" "ary[2]" "ary[6]" "ary[7]" "00)
$3=strftime("%F %T",$3)
}1' csvfile
Name,Equip1_SA-TEMP -- ASample,2013-07-08 00:00:00,55.10
Name,Equip1_SA-TEMP -- ASample,2013-07-08 00:10:00,55.50

关于regex - 在字符串中查找日期和时间并在 Windows 或 cmd 中使用 sed 重新格式化删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com