텍스트 파일에 저장된 신기원 시간 형식을 인간 친화적인 형식으로 변환

텍스트 파일에 저장된 신기원 시간 형식을 인간 친화적인 형식으로 변환

날짜가 에포크 시간 형식으로 저장되는 파일 이름 simcloud-target.txt가 있고 모든 날짜를 인간 친화적인 형식으로 변환하고 목록으로 인쇄하고 싶습니다(아래 표시된 것과 동일한 출력이므로 에포크가 아닌 동안 원함) ) 인간 친화적인 방식으로hh:mm:00)

sec504@slingshot:~$ cat simcloud-targets.txt
1679450009
1679450014
1679450018
1679450018
1679450022
1679450023
1679450024
1679450024
1679450033
1679450043
1679450046
1679450060
1679450065
1679450071
sec504@slingshot:~$ 

답변1

파일의 Unix 타임스탬프 앞에 접두사가 붙을 수 있으면 @GNU를 date사용하여 이를 읽을 수 있습니다 -f. 다음과 @같이 각 타임스탬프에 접두사를 추가할 수 있습니다 sed.

sed 's/^/@/' file

...그리고 다음과 같이 GNU에서 출력을 사용할 수 있습니다 date.

date -f <(sed 's/^/@/' file)

문제의 날짜 스탬프와 현지 시간대를 고려하면 다음과 같습니다.

Wed Mar 22 02:53:29 CET 2023
Wed Mar 22 02:53:34 CET 2023
Wed Mar 22 02:53:38 CET 2023
Wed Mar 22 02:53:38 CET 2023
Wed Mar 22 02:53:42 CET 2023
Wed Mar 22 02:53:43 CET 2023
Wed Mar 22 02:53:44 CET 2023
Wed Mar 22 02:53:44 CET 2023
Wed Mar 22 02:53:53 CET 2023
Wed Mar 22 02:54:03 CET 2023
Wed Mar 22 02:54:06 CET 2023
Wed Mar 22 02:54:20 CET 2023
Wed Mar 22 02:54:25 CET 2023
Wed Mar 22 02:54:31 CET 2023

그런 다음 평소와 같이 원하는 출력 형식을 설정할 수 있습니다 date. 여기서는 프로세스 대체 대신 일반 파이프를 사용하는 방법도 보여줍니다.

$ sed 's/^/@/' file | date -f - +'%F %T'
2023-03-22 02:53:29
2023-03-22 02:53:34
2023-03-22 02:53:38
2023-03-22 02:53:38
2023-03-22 02:53:42
2023-03-22 02:53:43
2023-03-22 02:53:44
2023-03-22 02:53:44
2023-03-22 02:53:53
2023-03-22 02:54:03
2023-03-22 02:54:06
2023-03-22 02:54:20
2023-03-22 02:54:25
2023-03-22 02:54:31

strftimeman 3 strftime사용할 수 있는 자리 표시자 형식은 라이브러리 함수( ) 설명서를 참조하세요 .

답변2

거의 모든 것을 사용할 수 있으므로 (g)awk를 사용할 수 있습니다.

awk '1{$1 = strftime("%F %H:%M:%S", $1); print}' < simcloud-targets.txt

결과(저는 다른 시간대에 있기 때문에):

2023-03-22 02:53:29
2023-03-22 02:53:34
2023-03-22 02:53:38
2023-03-22 02:53:38
2023-03-22 02:53:42

타임스탬프 이후에 다른 항목(예: 오징어 로그 파일)이 있더라도 계속 작동하기 때문에 이것을 제공합니다.

1679468468.282    223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -

~이 되다

2023-03-22 08:01:08 223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -

답변3

이와 같이 및를 사용하면 xargs다음과 GNU date같습니다.

$ xargs < file -I{} date -d '@{}' "+%F %T"

또는 다음과 같이 bourne* bash, dash, ash, yash, ksh, 를 사용합니다(단, & 는 사용하지 않음) zsh.shcshfish

$ while read epoch; do date -d "@$epoch" "+%F %T"; done < file

산출

2023-03-22 08:53:29
2023-03-22 08:53:34
2023-03-22 08:53:38
2023-03-22 08:53:38
2023-03-22 08:53:42
2023-03-22 08:53:43
2023-03-22 08:53:44
2023-03-22 08:53:44
2023-03-22 08:53:53
2023-03-22 08:54:03
2023-03-22 08:54:06
2023-03-22 08:54:20
2023-03-22 08:54:25
2023-03-22 08:54:31

그리고:

$ perl -nE 'say scalar localtime($_)' file 
Wed Mar 22 08:53:29 2023
Wed Mar 22 08:53:34 2023
Wed Mar 22 08:53:38 2023
Wed Mar 22 08:53:38 2023
Wed Mar 22 08:53:42 2023
Wed Mar 22 08:53:43 2023
Wed Mar 22 08:53:44 2023
Wed Mar 22 08:53:44 2023
Wed Mar 22 08:53:53 2023
Wed Mar 22 08:54:03 2023
Wed Mar 22 08:54:06 2023
Wed Mar 22 08:54:20 2023
Wed Mar 22 08:54:25 2023
Wed Mar 22 08:54:31 2023

관련 정보