gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:43:08 26 4
gpt4 key购买 nike

我有以下 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þ创建日期þþ发送日期þ修改日期þþ接收日期þ
þ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”、“创建日期”、“发送日期”、“修改日期”、“接收日期”
"NUM00000001","","2017 年 9 月 11 日上午 12:00","2018 年 6 月 16 日上午 12:00",""
"NUM00000002","","2016年5月2日上午12:00","2018年6月16日上午12:00",""

期望的输出:

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

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

最佳答案

根据样本数据,日期时间需要按第一个空格分割为日期和时间。您可以使用 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

关于awk - 需要使用 awk 将日期时间拆分为两个单独的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226809/

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