2013-06-17 6 views
0

У меня есть CSV временных меток данных формата:специальный формат временной метки CSV

8.11.2012 16:15:10 
21.11.2012 15:00:54 
11.11.2012 0:24:24 
8.11.2012 16:06:53 
9.11.2012 0:49:37 

Я хочу, чтобы применить специальный формат метки времени, как этот без одной цифры на каждой:

08_11_2012_16_15_10 
21_11_2012_15_00_54 
11_11_2012_00_24_24 
08_11_2012_16_06_53 

У меня есть пробы с регулярным выражением, поиск и замена, но получил следующее:

8_11_2012_16_15_10 
21_11_2012_15_00_54 
11_11_2012_0_24_24 
8_11_2012_16_06_53 

У кого-нибудь есть другая идея, может быть, с shell awk?

+0

Какие выражения вы использовали для получения ? –

ответ

0

Вы могли бы сделать это за два прохода. Найдите символ или короткую последовательность символов, которые никогда не встречаются в вашем файле данных. Здесь я буду использовать =#=. Первый проход тогда очень похож на то, что вы уже пробовали, но добавьте =#=0 перед всеми числами, которые должны быть преобразованы в двухзначные числа. Таким образом, 8.11.2012 16:15:10 изменен на =#=08_=#=011_2012_=#=016_=#=015_=#=010. Второй проход удалит =#= и ненужные нули, используя поиск регулярного выражения для =#=0*(\d\d[^\d]) и замените на \0.

Если файл содержит только даты и время, то вы можете добавить в него нулевые значения перед тем, как внести изменения, которые вы уже пробовали. Поиск регулярного выражения для \b(\d)\b и замена 0\1 преобразует любую цифру в две цифры. Обратите внимание, что \b(\d)\b не будет видеть _6_ как одну цифру, так как \b выполняет поиск границ слов, а _ считается частью слова. Пытаться найти ([^\d])(\d)([^\d]) и заменить на \10\2\3 не работает, потому что он может не обрабатывать начальный и конечный строки или файл по мере необходимости, также его нужно будет дважды запускать для обработки 6.5.2013

+0

большое спасибо! AdrianHHH, это решило мою проблему. – user1860165

+0

Добро пожаловать. См. Также http://stackoverflow.com/questions/17150126/special-timestamp-format-of-csv/17151181#17151181 – AdrianHHH

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