У меня в папке несколько файлов, разделенных запятыми. Каждый файл CSV выглядит следующим образом:

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

Мне нужно изменить второй столбец даты, чтобы отображать дату в этом формате «14.10.2015» или «2015-10-14».

Кто-нибудь может мне с этим помочь?

Благодарность

Вот что я пробовал:

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

Использование: дата [-jnu] [-d dst] [-r секунды] [-t запад] [-v [+ | -] val [ymwdHMS]] ... [-f fmt date | [[[мм] дд] ЧЧ] ММ [[cc] yy] [. ss]] [+ формат] «Столбец1», «Дата», «Столбец2»;

Использование: дата [-jnu] [-d dst] [-r секунды] [-t запад] [-v [+ | -] val [ymwdHMS]] ... [-f fmt date | [[[мм] дд] ЧЧ] ММ [[cc] yy] [. ss]] [+ формат] «fdfsd», «20151023», «rwer»;

Использование: дата [-jnu] [-d dst] [-r секунды] [-t запад] [-v [+ | -] val [ymwdHMS]] ... [-f fmt date | [[[мм] дд] ЧЧ] ММ [[cc] yy] [. ss]] [+ формат] «fsdsf», «20151023», «jjfg»;

2
user175084 26 Окт 2015 в 19:16

3 ответа

Лучший ответ

Вы можете использовать этот 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"
2
anubhava 26 Окт 2015 в 17:04

Python имеет очень надежный модуль csv.

Ты можешь сделать:

$ 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

Печать:

"Column1","Date","Column2"
"fdfsd","2015-10-23","rwer"
"fsdsf","2015-10-23","jjfg"
1
dawg 26 Окт 2015 в 17:29

Поскольку вам просто нужно вставить дефис в дату, это проблема манипулирования строкой, а не проблема манипулирования датой:

sed -i.bak -re 's/([0-9]{4})([0-9]{2})([0-9]{2})/\1-\2-\3/' *.csv
4
glenn jackman 26 Окт 2015 в 16:59