2012-03-17 19 views
1

この問題を解決してください。AWK - 'printf、print'の2つのコマンド 'printf'を置き換える?

私は、このコマンドを持っている:私は最初のコマンド 'のprintf' で 'VAR' を印刷するにはどうすればよい

awk 'BEGIN {printf "%-15s", "Date of birth:" > "/dev/stderr"; getline var; print "Today finished:", var ,"days"}' 

? 2番目のコマンド 'print'を削除できますか?

ありがとうございました。

EDIT-1:

答え用マット

最初の例は良いですが、次の行でプリント 'VAR'。同じ行に 'var'を印刷することは可能ですか?

EDIT-2:

答えためPeter.O

はあなたの助けをいただき、ありがとうございます。正確にポイント。データはさらなる計算に使用されます。計算結果は同じ行に出力されます。例:私は結果を取得したい

awk 'BEGIN {printf "%-15s", "Date of birth:" > "/dev/stderr"; getline var; print "Today finished:", var ,"days"}'` 

Date of birth: 2011-02-23 Today finished: 2011-02-23 days 

はEDIT-3:shellterため

答え

はfoをありがとうあなたのコメント。

+0

なぜですか?あなたは最初の例で何をしていますか? – Mat

+0

最初の例は良いですが、次の行に 'var'を表示します。 'var'を同じ行に印刷することはできますか? – Tedee12345

+0

ユーザーが同じ行に同じ値を入力したときに* awk *が同じ行に* var *を出力したいのですか? ...なぜ、プロンプト 'Enter the date:'の後ろに空白があるのですか?ユーザーが日付に入力する場所ですか?完成したラインがどのように見えるかの実際の例を**表示した場合に役立ちます。現時点では混乱しているので、私にはあなたはそれが次のように見えているようです: '日付を入力:2012-03-17 2012-03-17' ... –

答えて

1

サンプルコードでは、printfをstderrにリダイレクトしました。 "Enter the date:"がさらに処理される最終出力(stdout)に行きたくないと思われるからです。これはうまくいき、不要なテキストを破棄するきれいな方法です。あなたがフォーマットされた出力をしたいのであれば


Date of birth: 2011-02-23 Today finished: 2011-02-23 days
は標準出力(stdout)に行くためには、その後、あなたの質問への答えは簡単です:あなたは間違いなく、標準出力に向けられているprint/printfの別のインスタンスを呼び出す必要があります。

print/printfの概念はであり、その出力はです。それだけでプリント ...リダイレクション演算子>内部ではの動作(print(f))との接続が全くないため、print(f)を1回呼び出すと何らかの出力をstderrに送ることはできません。安心してstdoutにお越しください。

+0

説明していただきありがとうございます。これで管理できます。私はそのような質問があります。私は良い回答を得たことをどのように確認するのですか? – Tedee12345

+0

各回答の左上には、上に矢印のある数字とその下にある数字が表示されます。回答を良いものとしてマークするには、上向きの矢印をクリックします。これは番号を増やします。答えを悪いとマークするには、下の矢印をクリックしてカウンターを減らします。質問者(あなた)にはもう1つの選択肢があります。下の矢印の下の大きな目盛りをクリックして**最高**の回答を受け入れます。これは、通常、質問者が1つ以上の回答を上下にマークし、より良い回答が表示されるように時間を許した後に、**ベスト**の回答にチェックを入れることを意味します。 –