2013-08-19 1 views
0

Как преобразовать это:Преобразование даты в формат времени ISO до гггг/мм/ДД.ЧЧ: мм: сс

2013-08-16T13:24:18+0200

из текущего формата, который yyyy-mm-ddThh:mm:ss+hhmm в этот формат?

yyyy/mm/dd.hh:mm:ss (2013/08/18.13:24:18)

Значения находятся в файле CSV и есть и отрицательные значения, так что я могу не только заменяющие дефисы с слэша, также я хочу ту часть, которая определяет часовой пояс удален. Мои знания о sed и awk очень просты.

ответ

1

Разбиение CSV может быть очень сложным в зависимости от того, цитируется ли все или ничего не цитируется, или некоторые поля цитируются. И тогда мы можем начать беспокоиться о том, есть ли скрытые кавычки внутри ваших строк. Или запятые внутри ваших строк.

Не зная ваших данных (возможно, в ваших строках нет запятых и никаких кавычек, о которых можно беспокоиться), вы можете или не сможете использовать sed/awk. Если у вас сложный CSV, я предлагаю нечто большее, чем perl и Text :: CSV.

Итак, я покажу вам, как разбирать файл Только даты, чтобы оставить CSV-осложнения из этого.

Perl-путь:

cat tmp.txt | perl -e 'for (<>){ s!(\d+)\D(\d+)\D(\d+)T(\d+)\D(\d+)\D(\d+)\+.*!$1/$2/$3.$4:$5:$6!; print $_}' 

СЭД путь:

sed -r 's!([0-9]+)\D([0-9]+)\D([0-9]+)T([0-9]+)\D([0-9]+)\D([0-9]+)\+.*!\1/\2/\3.\4:\5:\6!' tmp.txt 
+0

Спасибо хороший ответ, кажется у меня нет достаточно очков, чтобы upvote что-нибыдь спасибо за все хорошие ответы. Я собираюсь начать изучать perl сегодня, кажется очень полезным. – user1744853

+0

на всякий случай, одно и то же регулярное выражение с европейской датой в обратном направлении (дд/мм/гггг) и только ЧЧ: мм без секунд: sed -r 's! ([0-9] +) - ([0-9] +) - ([0-9] +) ([0-9] +): ([0-9] +)! \ 3/\ 2/\ 1 \ 4: \ 5! ' AFile.txt – pdem

Смежные вопросы