プレフィックスをしたいエポック時間パラメータ行に。私が望む出力は次のとおりです。
$ echo foo bar baz | some_bash_awk_sed_date_program_or_something_else
1491146539 foo bar baz
私が得る実際の出力は次のとおりです。
$ echo foo bar baz | awk -f time_stamper.awk
1491146539
0 foo bar baz
私のものtime_stamper.awk
:
BEGIN {
OFS=" "
printf "%s ", system("date +'%s'")
}
{ print }
リードは0
戻り値から出ていると思います。date +'%s'
。私はOFS=" "
少なくとも1491146539 0 foo bar baz
変更された改行を空白として返すように設定を期待しました。
現在の試みに関するいくつかの質問:
- 私は大丈夫です。
OFS
組み込み変数? 0
なぜ前面に印刷されているのですかfoo bar baz
?
awk
さらに重要なことは、これが作業に適したツールであるかどうかわからないということです。たぶん他のユーティリティを使用する必要がありますsed
。date
- 希望の出力をどのように印刷できますか?
注:この質問はより具体的なものであるため、以下に関連しています。この問題。さらに、回答インストールが必要ですその他のユーティリティこれはUnixツールセットに興味深い追加のようです。しかし、私はタスクを実行するためにより伝統的なUnixユーティリティを使用したいと思います。
ベストアンサー1
このsystem()
関数はawk
コマンドを実行し、その状態を返します。0
コマンドが成功したので得たのです。の出力はdate +'%s'
別途印刷されます。
外部コマンドの出力を取得するには、次を使用できます。getline():
$ echo foo bar baz | awk '{"date +%s" | getline d; printf "%s %s\n", d, $0}'
1491147643 foo bar baz
OFS
デフォルトでは空白なので関係ありません。
gawk
またはを使用して、mawk
次のこともできます。
echo foo bar baz | gawk '{printf "%s %s\n", systime(), $0}'
systime()
うるう秒を除いて、エポック以降の秒数を返します。
あっ、一人でもできますdate
:
date +'%s foo bar baz'