노력하는 동안Bash 쉘에서 날짜 변환, 나는 노력했다GNU awk의 보조 프로세스 기능:
gawk -F, -v cmd='date +"%Y-%m-%d %H:%M:%S" -f-' '{print $5 |& cmd; cmd |& getline d; $5 = d}1' foo
명령이 정지됩니다. 나는 이것이 date
전체 입력이 읽힐 때까지 기다리기 때문일 것이라고 생각하여 파이프의 전송 절반을 닫아 보았습니다.
gawk -F, -v cmd='date +"%Y-%m-%d %H:%M:%S" -f-' '{print $5 |& cmd; close(cmd, "to"); cmd |& getline d; $5 = d}1' foo
이것은 작동합니다(예, 설정해야 한다는 것을 알고 있지만 OFS=,
지금은...).
하지만 date
입력 처리에는 문제가 없는 것 같습니다. 그러면 즉시 첫 번째 출력 줄이 제공됩니다.
d='Thu Apr 27 2017 23:19:47 GMT+0700 (ICT)'
(echo "$d"; sleep 1m; echo "$d") |
date +"%Y-%m-%d %H:%M:%S" -f-
어떻게 되어가나요?
답변1
다른 많은 프로그램과 마찬가지로 date
stdout의 출력은 tty가 아닐 때 버퍼링됩니다. 이것을 호출하면 stdbuf -oL
각 줄의 출력이 플러시되고 첫 번째 Gawk 예제 코드가 올바르게 작동합니다(파이프의 쓰기 끝을 닫지 않고).