출력을 날짜 -d "값"으로 파이프하는 방법은 무엇입니까?


14

"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"

답변:


13
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

1
감사합니다. 문제가 해결되었습니다. 왜 작동하지 않는 이유를 설명해 주셔서 감사합니다.
Shane

19

충분히 최근의 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을 나타냅니다.


2
이것이 정답입니다.
Petrus K.

위 명령의 출력을 특정 날짜와 비교할 수 있습니까? 예 : "수 1 월 30 일 21:04:27 PST 2014"보다 오래된 모든 날짜를 나열해야합니다.
Manu

@Manu 자체는 아니지만 dateutilsdategrep특정 사용 사례에 적합합니다.
hroptatyr

이것은 훨씬 쉽다! 내가 읽을 수 있다면 맨 페이지에서 이것을 발견했을 수도 있습니다.
Ken Sharp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.