2016-08-25 4 views
0

strftime을 사용하여 gawk를 사용하여 유닉스 타임 스탬프를 날짜 형식으로 변환하려고합니다. awk 명령에서 strftime 함수를 여러 번 사용하는 방법

내가의 strftime 한 번 사용

, 내가 예상 결과를 얻을 :

$ echo 1454310000 | gawk -F "," '{$s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); $e=$s; print ($s, $e);}' 
2016-02-01 07:00:00 2016-02-01 07:00:00 

를하지만의 strftime 여러 번 사용할 때, 두 결과가 완전히 잘못 반환

$ echo 1454310000 | gawk -F "," '{$s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); $e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print ($s, $e);}' 
1970-01-01 00:33:36 1970-01-01 00:33:36 

왜 이런 일이며, 같은 입력에 대해 두 번 strftime을 사용할 수 있도록 어떻게 수정합니까?

+2

:

는 간단한 예제를 참조하십시오? awk 코드에서 쉘 코드 스타일을 사용하고 있다고 생각합니다. 'print $ n'은 변수'n'의 내용을 인쇄하지 않고 입력 행의 ** n ** th 필드를 출력하기 때문에'awk' 기본 안내서를 읽고'awk'에 대해 배우십시오. – Jdamian

+0

'awk' 코드를 실행할 때'fatal : 3은 strftime 인수의 수만큼 유효하지 않습니다. ' – Jdamian

답변

0

변수를 역 참조하기 위해 '$'기호가 필요하지 않습니다. 시도해보십시오 :

echo 1454310000 | gawk -F "," '{s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print (s, e);}' 
1

여기 변수 문제가 있습니다. awk에서 변수는 선행 달러로 참조되지 않습니다. 그래서 var에 '예'라고하고 $var에 '아니오'라고 : 무슨 일했다

$ echo 1454310000 | gawk -F "," '{s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print (s, e);}' 
2016-02-01 07:00:00 2016-02-01 07:00:00 

?

s 이후

e$s=something() 상기 경우에 0$에 해당 something() 출력 플러스 미정 변수 값이 디폴트 값을 할당 결국, 변수 정의 하였다. 그리고 $0은 전체 레코드이므로 레코드 자체의 값을 할당했습니다. 당신은`$의 e`과`$의 s`의 의미에 대해 어떻게 생각하십니까

$ echo "hello" | awk '{$s="bu"; print}' 
bu