2012-03-17 100 views
1

請幫助這個問題。AWK - 替換兩個命令'printf,print'單個命令'printf'?

我有這樣的命令:

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

如何打印「變種」僅在第一個命令上的「printf」?我可以刪除第二個命令「打印」嗎?

謝謝你的幫助。

編輯-1:

答案

第一個例子是好的,但在打印下一行 '變種'。是否可以在同一行中打印'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 

編輯-3:

答案shellter

謝謝FO你的意見。

+0

爲什麼?你在第一個例子中有什麼作品,不是嗎? – Mat 2012-03-17 07:06:39

+0

第一個例子很好,但在下一行打印'var'。 是否可以在同一行中打印'var'? – Tedee12345 2012-03-17 09:18:48

+0

當用戶剛剛在同一行輸入相同的值時,是否真的希望* awk *在同一行上打印* var *? ......爲什麼在提示符「輸入日期:」之後有太多空格?那是你想讓用戶輸入日期的地方嗎?如果您**顯示了您期望完成的行看起來像樣的一個實際例子,這將有所幫助。因爲目前它令人困惑,對我來說,您似乎希望它看起來像:'輸入日期:2012-03-17 2012-03-17' ... – 2012-03-17 10:30:31

回答

1

在您的示例代碼中,您已將printf重定向到stderr。我認爲這是因爲你不想"Enter the date:"去最終的輸出(標準輸出),這將被進一步處理...這是有效的,是一個乾淨的方式處置不需要的文本。

所以,如果你希望你的格式化輸出:
Date of birth: 2011-02-23 Today finished: 2011-02-23 days
去到標準輸出(stdout),然後回答你的問題很簡單:你一定要打電話的print/printf另一個實例,它是針對標準輸出。

print/printf沒有概念其中它的輸出正在進行;它只是打印 ...重定向運算符>沒有任何連接內部打印(f)的工作,所以你不能得到一個單一的打印電話(f)發送一些輸出到stderr和休息到stdout

+0

感謝您的澄清。現在你可以管理。我有這樣一個問題。我如何確認我得到了很好的回覆? – Tedee12345 2012-03-17 15:08:43

+0

每個答案的左上角是一個數字,上面是箭頭,下面是另一個箭頭。要將答案標記爲好而有用,請單擊上方的箭頭;這會增加數字。要將答案標記爲不合適,請單擊較低的箭頭以減少計數器。提問者(你)也有另一種選擇,即。通過點擊底部箭頭下方的大勾來接受**最佳**答案。這通常意味着提問者可以向上/向下標記一個或多個答案,並且在允許時間出現更好的答案之後,您標記**最佳答案(通過標記)。 – 2012-03-17 16:53:57