AWK - 替换两个命令'printf,print'单命令'printf'?

时间:2012-03-17 07:00:24

标签: awk printf getline

请帮助解决这个问题。

我有这个命令:

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

如何仅使用第一个命令'printf'打印'var'?我可以删除第二个命令'print'吗?

感谢您的帮助。

修改-1:

  

回答 Mat

第一个例子很好,但在下一行打印'var'。是否可以在同一行中打印'var'?

修改-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

感谢您的评论。

1 个答案:

答案 0 :(得分: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)的内部工作没有任何关联,所以你不能得到一个打印(f)将一些输出发送到stderr,其余输出发送到stdout