简体   繁体   English

使用bash脚本格式化csv中的日期列

[英]format date column in csv with bash script

I have multiple comma separated files in a folder. 我在一个文件夹中有多个逗号分隔的文件。 Each CSV file looks like following: 每个CSV文件如下所示:

"Column1","Date","Column2"
"fdfsd","20151023","rwer"
"fsdsf","20151023","jjfg"
.
.

I need to modify the 2nd Date column to display the date in this format "10/14/2015" or "2015-10-14". 我需要修改“第二个日期”列,以使用“ 10/14/2015”或“ 2015-10-14”格式显示日期。

Please can someone help me with this? 请有人可以帮我吗?

Thanks 谢谢

This is what i have tried: 这是我尝试过的:

cat test.csv | while read line ; do echo $line\;$(date -d "%Y%m%d" "+ YYYY/MM/DD") ; done

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | 用法:日期[-jnu] [-d dst] [-r秒] [-t西] [-v [+ |-] val [ymwdHMS]] ... [-f fmt日期| [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] "Column1","Date","Column2"; [[[mm] dd] HH] MM [[cc] yy] [。ss]] [+ format]“ Column1”,“ Date”,“ Column2”;

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | 用法:日期[-jnu] [-d dst] [-r秒] [-t西] [-v [+ |-] val [ymwdHMS]] ... [-f fmt日期| [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] "fdfsd","20151023","rwer"; [[[mm] dd] HH] MM [[cc] yy] [。ss]] [+ format]“ fdfsd”,“ 20151023”,“ rwer”;

usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | 用法:日期[-jnu] [-d dst] [-r秒] [-t西] [-v [+ |-] val [ymwdHMS]] ... [-f fmt日期| [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] "fsdsf","20151023","jjfg"; [[[mm] dd] HH] MM [[cc] yy] [。ss]] [+ format]“ fsdsf”,“ 20151023”,“ jjfg”;

由于您只需要在日期中插入连字符,因此这是一个字符串操作问题,而不是日期操作问题:

sed -i.bak -re 's/([0-9]{4})([0-9]{2})([0-9]{2})/\1-\2-\3/' *.csv

You can use this awk to reformat a given date string: 您可以使用以下awk重新格式化给定的date字符串:

awk 'BEGIN{FS=OFS=","} NR>1{cmd = "date -d \"" $2 "\" \"+%Y-%m-%d\"";
       cmd | getline out; $2=out; close("uuidgen")} 1' file
"Column1","Date","Column2"
"fdfsd",2015-10-23,"rwer"
"fsdsf",2015-10-14,"jjfg"

Python has a very robust csv module. Python有一个非常强大的csv模块。

You can do: 你可以做:

$ python -c '
import csv
import datetime
import fileinput

def line_out(line): 
    print ",".join(["\"{}\"".format(e) for e in line])

csv_data=csv.reader(fileinput.input())
line_out(next(csv_data))
for line in csv_data:
    line[1]=datetime.datetime.strptime(line[1], "%Y%m%d").date().isoformat()
    line_out(line)' file

Prints: 打印:

"Column1","Date","Column2"
"fdfsd","2015-10-23","rwer"
"fsdsf","2015-10-23","jjfg"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM