텍스트 파일 내의 타임스탬프 변환

텍스트 파일 내의 타임스탬프 변환

UDB에서 로컬로 테이블을 추출하여 csv 파일 형식으로 변환했습니다. 추출 후 여러 번 표시된 타임스탬프가 엉망이 되었습니다. 타임스탬프 형식이 표시될 때 이를 업데이트하는 쉘 스크립트를 작성하고 싶습니다.

현재 타임스탬프:

2009-06-08-11.15.45.589225

필수 타임스탬프:

2009-06-08 11:15:45.589225

sed및 명령을 사용해 보았지만 awk파일에서 현재 타임스탬프를 식별하는 것이 약간 어렵습니다.

도와주세요?

답변1

이것은 작동합니다:

sed -Ei 's/([0-9]{4}-[0-9]{2}-[0-9]{2})-([0-9]{2}).([0-9]{2}).([0-9]{2}).([0-9]{6})/\1 \2:\3:\4.\5/g' filename

괄호는 타임스탬프를 5개의 그룹으로 나누므로 \1은 2009로 대체되고 \2는 06으로 대체되는 식입니다.

답변2

GNU의 한 가지 가능성 sed:

sed -Ei 's/([0-9]{4}-[0-9]{2}-[0-9]{2})-([0-9]{2}).([0-9]{2}).([0-9]{2})/\1 \2:\3:\4/' file

([0-9]{4}-[0-9]{2}-[0-9]{2})-([0-9]{2})\.([0-9]{2})\.([0-9]{2})패턴을 찾아 합계를 YYYY-MM-DD-HH.MM.SS캡처합니다 . .YYYY-MM-DDHHMMSS

/\1 \2:\3:\4/전체 패턴(YYYY-MM-DD-HH.MM.SS)을 캡처된 패턴(YYYY-MM-DD)(HH)(MM)(SS)로 바꾼 다음 대시를 공백으로, 점을 다음으로 바꿉니다.:

답변3

tr -c '0-9' '[\n*]' | paste -d '-- ::.'  - - - - - - -

이는 입력에서 숫자가 아닌 모든 문자를 줄 바꿈으로 바꾼 다음 paste이 옵션으로 지정된 구분 기호를 사용하여 차례로 7개 필드의 출력을 생성합니다.-d

시험:

$ echo '2009-06-08-11.15.45.589225' | tr -c '0-9' '[\n*]' | paste -d '-- ::.'  - - - - - - -
2009-06-08 11:15:45.589225
$ cat file
2009-06-08-11.15.45.589225
2009-07-09-11.15.45.222222
2009-08-10-11.15.45.333333
$ tr -c '0-9' '[\n*]' <file | paste -d '-- ::.'  - - - - - - -
2009-06-08 11:15:45.589225
2009-07-09 11:15:45.222222
2009-08-10 11:15:45.333333

관련 정보