需要使用awk将日期时间拆分为两个单独的字段

需要使用awk将日期时间拆分为两个单独的字段,awk,split,Awk,Split,我有下面的awk命令和输出将DAT文件转换为具有特定FS的CSV,但我希望将包含日期时间值的字段拆分为两个单独的字段加上时间格式的add: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þ 2017年11月9日上

我有下面的awk命令和输出将DAT文件转换为具有特定FS的CSV,但我希望将包含日期时间值的字段拆分为两个单独的字段加上时间格式的add: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þ
2017年11月9日上午12:00 2018年6月16日上午12:00
NUM00000002þþþþ5/2/2016 12:00 AMþ6/16/2018 12:00 AMþþ

输出:

“NUM”、“创建日期”、“发送日期”、“修改日期”、“接收日期”
“NUM00000001”、“2017年11月9日上午12:00”、“2018年6月16日上午12:00”
“NUM00000002”,“2016年2月5日12:00上午”,“2018年6月16日12:00上午”,“代码>

期望输出:

“NUM”、“创建日期”、“创建时间”、“发送日期”、“发送时间”、“修改日期”、“修改时间”、“接收日期”、“接收时间”
“NUM00000001”、“2017年11月9日”、“上午12:00:00”、“2018年6月16日”、“上午12:00:00”、“2017年11月9日”
“NUM00000002”、“2016年5月2日”、“12:00:00 AM”、“2018年6月16日”、“12:00:00 AM”、“12:00:00 AM”、“2016年5月2日”、“2018年6月16日”、“2018年12:00:00 AM”和


是否可以为每个字段添加代码来执行拆分?请注意,某些行/行的日期/时间可以为空。

根据示例数据,日期时间需要按第一个空格拆分为日期和时间。您可以使用awk函数。例如:

awk '
  # Get Date
function get_d (v) {
  sep = index(v, " ")
  return substr(v, 1, sep-1) "\"" ;
}
   # Get Time
function get_t (v) {
  sep = index(v, " ")
  if ( !sep ) return ""
  # insert :00 to time.
  tt= substr(v, sep+1, 5) ":00" substr(v, sep+6)
  # Remove leading zero from hour.
  sub("^0", "", tt)
  return "\"" substr(v, sep+1, 5) ":00" substr(v, sep+6)
#  return "\"" substr(v, sep+1, 99) ;

}

BEGIN {FS="\024"; OFS = ","; ORS = "\n"}
{gsub(/\376/, "\"", $0);
  print $1, get_d($9), get_t($9), get_d($10), get_t($10), get_d($11), get_t($11), get_d($12), get_t($12)}
' input.dat > output.csv

谢谢@John1024-用input更新了上面的初始问题
þ
是0x24?您可以在特定字段上使用
gsub
,提取字段并输出它们。awk中甚至有
split
,您可以在上面拆分$5字段spaces@KamilCuk-不,不显示逗号delim char,即DC4,如果输入非常稳定,您可以使用
sed
sed-E/([0-9\/]{9})([0-9:{4})([AP]M)来准备它/\1\024\2:00\3/g'
pluse uno用于在注释后添加数据、当前输出、所需输出!祝您好运。谢谢@dash-o,这似乎是可行的,尽管我正在尝试找出如何在时间中添加秒数。在字段为空的情况下,似乎正在添加意外的引号,即使输入中没有秒,您也可以在tim中添加:00e表示第二个属性。get\u t Up Modified要添加空检查,请将:00添加到返回值最后一个问题,如果时间格式在小时内没有两位数,我如何解释时间格式,例如,
4:15 PM
vs
12:00 AM
在“get\t”中,您可以检查结果时间字符串是否与“0[0-9]匹配,并在本例中删除前导的“0”