我尝试解析csv文件,需要更改一些值以便进一步处理。
csv文件包含日期col(列号4),其中包含如下值: 2016032100 2016032318 等
我想更改csv文件中的所有日期值 2016032102来自: 2016-03-21 02:00:00
我尝试了以下内容:
echo "$(awk -F';' -v OFS=';' '$4=${4:0:4}-${4:4:2}-${4:6:2} ${4:8:2}:00:00"' $FILE)" > $FILE
但这当然行不通。
我也尝试将转换转换为函数,但这也不起作用。
你有什么想法吗?
答案 0 :(得分:1)
永远不要:
echo "$(command $FILE)" > $FILE
对于“command”的任何值,因为shell在调用“command”来读取它之前可以高兴地清空$ FILE。这样做:
command "$file" > tmp && mv tmp "$file"
我还引用了变量,并将其从大写更改为小写,因为这两件事情也很重要(谷歌或阅读任何shell书)。
现在回到您的具体问题,这是您的代码似乎正在尝试做的事情:
awk 'BEGIN{FS=OFS=";"} {$4=substr($4,1,4)"-"substr($4,5,2)"-"substr($4,7,2)" "substr($4,9,2)":00:00"} 1' "$file"
这是否符合您的要求将取决于我们尚未看到的CSV的其他内容,但实际上并不是逗号分隔值(CSV)文件。
答案 1 :(得分:0)
你可以使用python csv模块读取文件,datatime模块进行转换
import datetime
pythonTime = datetime.datetime.strptime("2016032100", "%Y%m%d%H")
print pythonTime.strftime("%Y-%m-%d %H:%M:%S")