텍스트 파일에 표시되는 날짜 형식 변경

텍스트 파일에 표시되는 날짜 형식 변경

이 코드

grep -i 'logged in' path-to-file | tail | awk '{ print $6,"logged in at",substr($2,1,8),"on",$1"."; }' | sed 's/"//g'

출력됩니다

해당 닉네임은 2017년 12월 22일 22시 06분 58초에 로그인되었습니다.

내가 원하는 것은 다음과 같이 출력됩니다.

닉네임은 2017년 12월 22일 오후 10시 6분 58초에 로그인되었습니다.

답변1

unix date명령은 원하는 형식으로 날짜를 인쇄할 수 있습니다. 이 --date플래그를 사용하면 현재 날짜 및 시간과 다른 날짜 및 시간을 인쇄할 수 있습니다. 그러나 date날짜를 구문 분석하는 명령의 경우 제거해야 합니다.존재하다입력한 날짜에 다음 sed 명령을 사용할 수 있습니다.

sed -r 's,\s+on\s+, ,g'

원하는 출력 형식과 결합하면 다음을 얻을 수 있습니다.

date --date="$(echo '22:06:58 on 2017-12-22' | sed -r 's,\s+on\s+, ,g')" '+%r on %B %d, %Y'

이제 awk 명령과 결합하면 됩니다. 이는 항상 동일한 형식을 사용한다고 가정하면 쉽게 수행할 수 있습니다."사용자 이름 로그인 날짜". 가질 수 있으니 참고하세요존재하다awk아무것도 인쇄되지 않으므로 다음 sed을 호출할 필요가 없습니다.

while read line
do
    echo $line | awk '{print $1" "$2" "$3" "$4" "}' | tr -d '\n'
    date --date="$(echo $line | awk '{print $5" "$7}' | tr -d '.')" '+%r on %B %d, %Y'
done

제시한 예에서는 다음과 같이 인쇄됩니다( locale 사용 en-NZ).

닉네임 2017년 12월 22일 오후 10시 6분 58초 로그인

관련 정보