努力中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サンプルコードが正しく機能します(パイプの書き込みの終わりを閉じずに)。