У меня есть файл с данными:
[15:29:58.496640]
[15:29:58.496644]
[15:29:58.496665]
[15:29:58.496682]
[15:29:58.497096]
[15:29:58.498621]
Мне нужен вывод в миллисекундах, используя awk
в CentOS.
Например:
15:29:58.496640 -> 1499421598.496
код пробовал:
awk '{gsub(/[][]/,"");a=$1;x="'"`date -d a +'%s.%3N'`"'"; print x" " a}' file
Внесены изменения в существующий код:
day=$(date +%d-%b-%y)
awk -v var=$day 'BEGIN{cmd="date +%s.%6N -d "} {gsub(/[][]/,"");a=varFS$1;cmd a|getline var1;print var1;}' file
Мы можем обрезать начальные и закрывающие скобки с помощью tr
, а затем использовать awk
для очень простых математических вычислений:
$ tr -d '[]' < input | awk -F: '{secs=$3; secs+=$2*60; secs+=$1*60*60; printf "%.3f\n", secs*1000 }'
55798496.640
55798496.644
55798496.665
55798496.682
55798497.096
55798498.621
Чтобы показать и ввод, и вывод (с фигурными скобками, прикрепляемыми к ), мы просто расширяем оператор printf
:
$ tr -d '[]' < input | awk -F: '{secs=$3; secs+=$2*60; secs+=$1*60*60; printf "[%s]\t%.3f\n", $0,secs*1000 }'
[15:29:58.496640] 55798496.640
[15:29:58.496644] 55798496.644
[15:29:58.496665] 55798496.665
[15:29:58.496682] 55798496.682
[15:29:58.497096] 55798497.096
[15:29:58.498621] 55798498.621
Без awk некоторая (не очень хорошая )возможность может состоять в том, чтобы отформатировать секунды с помощью date
и обрезать оставшиеся мс с помощьюsed
:
$ DATE="15:29:58.498621"
$ echo $(date +%s --date="$DATE" --utc).$(echo $DATE | sed -r "s/.*\.([0-9]{3}).*/\1/g")
1499441398.498
Соболочкойциклом while:
while read r; do date -d "${r:1:-1}" +%s.%3N ; done < file
Выход:
1499430598.496
1499430598.496
1499430598.496
1499430598.496
1499430598.497
1499430598.498