출력을 날짜 -d “값”으로 파이프하는 방법은 무엇입니까? 일 16:04:27 EST

“2014-01-30 05:04:27 GMT”와 같은 날짜가 있고 date -d “2014-01-30 05:04:27 GMT”를 실행하면 출력이 서버의 시간대 ( “Thu 1 월 30 일 16:04:27 EST 2014 “).

grep 및 cut을 사용하여 파일에서 GMT의 날짜를 추출했습니다. 그러나 나는 이것을 현지 시간으로 변환하려고 애 쓰고 있습니다.

예를 들면 다음과 같습니다.

[user @ server log] # grep “something”logfile.txt | grep “성공”| 컷 -f1 -d ‘[‘

출력 : 2014-01-30 05:04:27 GMT

결과를 “date -d”로 전달하기 위해 끝에 무엇을 추가 할 수 있습니까?

시도 :

  • [user @ server log] # grep “something”logfile.txt | grep “성공”| 컷 -f1 -d ‘[‘| 날짜 -d
  • [user @ server log] # grep “something”logfile.txt | grep “성공”| 컷 -f1 -d ‘[‘| 데이트
  • [user @ server log] # grep “something”logfile.txt | grep “성공”| 컷 -f1 -d ‘[‘| 날짜 -d “$ 1”


답변

gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

또는 파이프 라인 형식을 선호하는 경우 :

grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }

문제는 datestdin을 사용하지 않는다는 것입니다. 따라서 stdin을 변수 ( gmt여기에서 호출 ) 로 캡처 한 다음 명령 행에이를 제공해야 date합니다.

두 번째 접근 방식의 샘플 출력 :

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014

답변

충분히 최근의 coreutils에서 GNU 날짜를 사용하는 date -f경우 도움말 화면에 있습니다.

-f, --file=DATEFILE       like --date once for each line of DATEFILE

따라서 귀하의 시도 4는 다음과 같습니다.

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

마지막 -은 stdin을 나타냅니다.