내 입력 파일은 쉼표로 구분된 .csv입니다. 두 번째 열을 유닉스 시간에서 아래와 같이 읽을 수 있는 날짜/시간 형식으로 변환하고 싶습니다.
before 1502280000
after 8/10/17 08:00:00
또한 제목이기 때문에 첫 번째 줄을 무시하고 싶습니다.
저는 Solaris 10의 bash 쉘에서 실행 중입니다.
내 CSV의 처음 두 행은 다음과 같습니다.
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,1502286180,xxxx,xxxx
xxxx,1502280347,xxxx,xxxx
출력을 찾고
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug 9 09:43:00 EDT 2017,xxxx,xxxx
xxxx,Wed Aug 9 08:05:47 EDT 2017,xxxx,xxxx
답변1
저는 YYYY-mm-dd HH:MM:SS 시간 형식을 적극 권장합니다. 이 형식은 명확하고 어휘 및 시간순으로 정렬됩니다.
이를 달성하기 위해 Perl을 사용할 수 있습니다.
perl -MPOSIX=strftime -F, -ane '
$F[1] = strftime("%F %T", localtime $F[1]) if $. > 1;
print join ",", @F
' file
답변2
이 awk
방법:
awk -F, 'NR>1{printf"%s,",$1;
system("printf \"$(date -d @"$2")\"");printf",%s,%s\n",$3,$4}
' infile.txt
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug 9 09:43:00 EDT 2017,xxxx,xxxx
xxxx,Wed Aug 9 08:05:47 EDT 2017,xxxx,xxxx
답변3
Miller( mlr
)를 사용하여 Unix 타임스탬프 형식을 지정합니다 strftime_local()
. 생성된 시간+날짜는 현지 시간대입니다.
$ mlr --csv put '$DATE_TIME_CREATED = strftime_local($DATE_TIME_CREATED,"%c")' file
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug 9 13:43:00 2017,xxxx,xxxx
xxxx,Wed Aug 9 12:05:47 2017,xxxx,xxxx
strftime(3)
사용할 수 있는 형식 문자열은 시스템 설명서를 참조하세요 . %c
"국가별 시간 및 날짜 표현으로 대체" 형식입니다.