Как обрезать наносекунды до миллисекунд с помощью sed - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть CSV-файл, содержащий метки времени в формате 2011-01-01 12:30:10.123456+00, и я хочу удалить последние 3 цифры наносекунды, чтобы получить 2011-01-01 12:30:10.123+00.

Как мне это сделать с помощью sedили подобный инструмент?

Предостережение заключается в том, что иногда точность меняется.Я хочу сохранить только первые три цифры наносекунды после периода.

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Это gnu sed сохранит первую цифру 3 и удалит все остальные:

cat file
2011-01-01 12:30:10.123456+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.12345678+00

sed -r "s/(\.[0-9]{3})[0-9]*/\1/g" file
2011-01-01 12:30:10.123+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.123+00

Укороченная версия сообщения пацифистов:

sed "s/\.*[0-9][0-9][0-9]+/+/g" file #original
sed "s/[0-9]\{3\}+/+/g" file         #Shorter version

2011-01-01 12:30:10.123+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.12345+00  #Both version gives more than 3 digits if its more than 6 total
0 голосов
/ 20 сентября 2019

Вы можете сделать что-то вроде этого:

var="2011-01-01 12:30:10.123456+00"
echo $var | sed "s/\.*[0-9][0-9][0-9]+/+/g"
...