AWK를 사용하여 특정 시간을 밀리초로 변환

AWK를 사용하여 특정 시간을 밀리초로 변환

데이터가 포함된 파일이 있습니다.

[15:29:58.496640]
[15:29:58.496644]
[15:29:58.496665]
[15:29:58.496682]
[15:29:58.497096]
[15:29:58.498621]

CentOS에서 밀리초 단위로 출력을 사용하고 싶습니다 awk.

예를 들어:

15:29:58.496640 -> 1499421598.496

시도한 코드:

awk '{gsub(/[][]/,"");a=$1;x="'"`date -d a +'%s.%3N'`"'"; print x" " a}' file

답변1

를 사용하여 여는 괄호와 닫는 괄호를 다듬은 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

답변2

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

답변3

그리고껍데기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

답변4

기존 코드가 변경되었습니다.

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

관련 정보