我编写了一个脚本,它从 CSV 文件中获取值并将其插入到 postgres 表中,但遇到了问题。
CSV 文件中的日期列采用“YYYYMMDDHH24MISS”格式,表中的同一列定义为时间戳,当使用 \copy 命令插入时,出现以下错误,
ERROR: 22008: date/time field value out of range: "20000125200942"
因此,我尝试了一些方法,并发现如果我有“YYYYMMDD HH24MISS”格式的条目,则插入工作正常。
现在的问题是我不知道如何在 ksh 中格式化 CSV 文件的条目。
我尝试将 gsub 命令与 awk 一起使用,但似乎不起作用。
awk 'BEGIN {FS=OFS=","} {gsub(/^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$/, "\\1\\2\\3 \\4\\5\\6", $1)} 1' input_file.csv > output_file.csv
我们将不胜感激您的所有帮助
假设:
- 所有输入(第一个字段)均由 14 位数字组成
YYYYMMDDHHMMSS
format
输入示例:
$ cat input_file.csv
20000125200942,xxxxx,xxxx
One awk
我们重新定义第一个字段的想法($1
) 具有一对用空格分隔的子字符串:
awk 'BEGIN {FS=OFS=","} {$1=substr($1,1,8) " " substr($1,9)} 1' input_file.csv > output_file.csv
这会生成:
$ cat output_file.csv
20000125 200942,xxxxx,xxxx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)