2013-03-12 2 views
0

У меня есть файл CSV читать что-то вроде:Как изменить временную метку от MMDDYYYY до YYYYMMDD в файлах CSV?

"Name","Payment",...,"DATE" 
"Mike","40",...,"12252012" 
"Jack","55",...,"01162013" 
... 

Файл содержит около нескольких тысяч таких списков. И есть некоторые поля, значения которых могут быть 8-значными или более длинными числами. Ясно одно: поле DATE является последним столбцом.

Как я могу изменить столбец DATE в нем от MMDDYYYY до YYYYMMDD?

Лучше в Корн Shell.

Спасибо.

ответ

2

Edit: Если поле даты всегда последним в строке, вы можете использовать:

cat file.csv | perl -pe 's/(.*,")(\d{2})(\d{2})(\d{4})"/$1$4$2$3"/' 

или

perl -p -i -e 's/(.*,")(\d{2})(\d{2})(\d{4})"/$1$4$2$3"/' file.csv 

Если CSV имеет только одно поле с восьми или больше цифр:

С Perl:

cat file.csv | perl -pe 's/(\d\d)(\d\d)(\d\d\d\d)/$3$1$2/' 

или короче (редактировать файл на месте):

perl -p -i -e 's/(\d{2})(\d{2})(\d{4})/$3$1$2/' file.csv 
+0

Спасибо за решение. Но как иметь дело с возможностью любого другого столбца, имеющего ровно 8 цифр? Однако есть один критерий: DATE всегда является последним столбцом. –

+1

Я отредактировал ответ - теперь он ищет последнее поле. – kamituel

+0

Спасибо, но похоже, что окончательная цитата потеряна? –