열의 타임스탬프를 날짜로 변환하는 방법은 무엇입니까?

열의 타임스탬프를 날짜로 변환하는 방법은 무엇입니까?

다음 내용이 포함된 파일이 있습니다.

1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22

타임스탬프를 다음 형식으로 날짜로 변환하고 싶습니다.

2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22

어떻게 해야 하나요?

나는 이것이 작동한다는 것을 알고 있습니다 :( perl -pe 's/(\d+)/localtime($1)/e'통해이 문제) 그러나 출력 형식은 Mon Nov 10 02:00:03 2014.

이 명령이 타임스탬프를 내가 원하는 출력으로 변환할 수 있다는 것을 알고 있지만 모든 따옴표와 항목 때문에 사용하여 작동하도록 date -d@1415602803 +"%F %H:%M:%S"할 수는 없습니다 .awksystem("cmd")

답변1

여기서 뭔가를 발견했습니다:Stackoverflow - 명령줄에서 Unixtime에서 변환.

이것을 생각해 냈습니다 :

awk -F"," '{OFS=","; $1=strftime("%Y-%m-%d %H:%M:%S", $1); print $0}' file
  • -F","필드 구분 기호를 사용하세요 ,.
  • OFS=",";이러한 방식으로 출력 필드도 다음과 같이 ,구분됩니다.
  • $1=strftime("%Y-%m-%d %H:%M:%S", $1);첫 번째 필드의 값을 $1지정된 형식으로 변경하고
  • print $0;전체 줄을 인쇄합니다.

답변2

어쩌면 이렇게

perl -pe 'use POSIX qw(strftime); s/^(\d+)/strftime "%F %H:%M:%S", localtime($1)/e' 

답변3

원하는 경우 모든 날짜 형식으로 외부 명령을 awk사용할 수 있습니다.date

awk -F, -v OFS="," '{("date +%F\ %T -d @"$1)|getline $1}1'

답변4

나는 9개월 전에 이 질문과 중복된 것으로 표시된 질문을 했습니다. 방금 이 질문에 대한 답변을 게시해 달라는 요청을 보았습니다. 다음은 질문과 답변에 대한 링크입니다.

https://unix.stackexchange.com/a/304009/172916

관련 정보