
でawk
私がコマンドを使用するスクリプト
system(date)
ファイルの現在の日付を印刷しますが、このコマンドを実行すると、次の行も暗黙的に追加されます。awk
次の印刷内容が同じ行になるように、新しい行を追加せずに現在の日付を印刷する方法はありますか?
答え1
このdate
コマンドは、出力の末尾に改行文字を追加します。出力をawkとして読み、改行を追加せずに印刷できます。
"date" | getline date; printf "%s", date
スクリプトが長時間実行されない限り、スクリプトが開始された日付を取得することもできます。
awk -v date="$(date)" '
… printf "%s", date …
'
答え2
GNUawk
と@トーマスディキmawk
実装には、awk
時間と日付の機能に関するいくつかの拡張があります。これにより、次のことができます。
strftime("%+", systime())
date
ユーティリティで生成されたのと同じ形式で文字列表現を取得します。
または、少し異なる形式ですが、移植性が高い場合(BSDではないシステムの場合)
strftime("%c", systime())
テスト:
$ date
Mon Jan 28 11:22:22 CET 2019
$ gawk 'BEGIN { print strftime("%+", systime()) }'
Mon Jan 28 11:22:27 CET 2019
$ mawk 'BEGIN { print strftime("%+", systime()) }'
Mon Jan 28 11:22:33 CET 2019
システムがその形式をサポートしていない場合%+
(なしglibc2
)、%c
それに非常に近い形式を生成できます。正確な形式は、strftime()
Cライブラリの実装と現在の日付/時刻関連のロケールによって異なります。C
/ロケールでは上記とPOSIX
同じ出力が得られますが、タイムゾーンの略語はありません。
BSDawk
実装には基本的にこれらの機能がない可能性があります。
また見なさい:
- システムの
awk
および(時間/日付スタンプ形式のための)マニュアル 。strftime