【发布时间】:2019-10-03 20:59:46
【问题描述】:
我有以下 awk 命令和输出来将 DAT 文件转换为具有特定 FS 的 CSV,但我希望将包含日期时间值的字段拆分为两个单独的字段,并以时间格式添加 :00 秒。
awk 命令:
awk 'BEGIN{FS="\024"; OFS = ","; ORS = "\n"} {gsub(/\376/, "\"", $0); print $1, $2, $3, $4, $5}' input.dat > output.csv
输入
þNUMþþDATE CREATEDþþDATE SENTþþDATE MODIFIEDþþDATE RECEIVEDþ
þNUM00000001þþþþ9/11/2017 12:00 AMþþ6/16/2018 12:00 AMþþþ
þNUM00000002þþþþ5/2/2016 12:00 AMþþ6/16/2018 12:00 AMþþþ
输出:
"NUM","DATE CREATED","DATE SENT","DATE MODIFIED","DATE RECEIVED"
"NUM00000001","","9/11/2017 12:00 AM","6/16/2018 12:00 AM",""
"NUM00000002","","5/2/2016 12:00 AM","6/16/2018 12:00 AM",""
想要的输出:
"NUM","DATE CREATED","CREATED TIME","DATE SENT","SENT TIME","DATE MODIFIED","MOD TIME","DATE RECEIVED","RECEIVED TIME"
"NUM00000001","","","9/11/2017","12:00:00 AM","6/16/2018","12:00:00 AM","",""
"NUM00000002","","","5/2/2016","12:00:00 AM","6/16/2018","12:00:00 AM","",""
我可以为每个字段添加代码来执行拆分吗?请注意,对于日期/时间,某些行/行可以为 NULL。
【问题讨论】:
-
感谢@John1024 - 用输入更新了上面的初始问题
-
þ是 0x24 吗?您可以在特定字段上使用gsub,提取字段并输出它们。 awk 中甚至还有split,您可以在其中将 $5 字段拆分为空格 -
@KamilCuk - 不,没有显示逗号分隔字符,它是 DC4,þ 是 376
-
如果输入只是稳定的,你可以用
sed预解析它。sed -E 's/([0-9\/]{9}) ([0-9:]{4}) ([AP]M)/\1\024\2:00 \3/g' -
pluse-uno 用于添加数据、当前输出、注释后所需的输出!祝你好运。