使用printf以特殊格式打印值

时间:2010-06-02 09:11:16

标签: linux shell printf

我需要使用printf打印以下值,如下所示:

printf "[`date +%d"/"%b"/"%G"-"%T`] [WARN] $PARAM1 $PARAM2 $PARAM3

所需的输出:

[02/Jun/2010-11:08:42] [WARN]  val1....val2...val3

val1到val2之间以及从val2到val3之间的间隙必须是const间隙 不依赖于值的长度

2 个答案:

答案 0 :(得分:1)

printf "%s [WARN] %s %s %s\n" `date +"%d/%b/%G-%T"` foo bar baz

不确定你的差距是什么意思。如果是foobarbaz的列宽,请尝试%13s,其中13是最小列宽。

答案 1 :(得分:1)

我理解你的问题。 使用另一个答案作为我的基础:

如果你想填充每个PARAM,那么只需在printf中添加一个数字参数,它就会将它填充到每个字段的字符数。

填充20个字符:     printf“%s [WARN]%20s%20s%20s”date +"%d/%b/%G-%T" foo bar baz

示例:

printf "%s [WARN] %16s %16s %16s" [`date +"%d/%b/%G-%T"`] foo bar baz

02/Jun/2010-11:22:54 [WARN]              foo              bar              baz

...更长

printf "%s [WARN] %16s %16s %16s" [`date +"%d/%b/%G-%T"`] longerfoo longerbar longerbaz

02/Jun/2010-11:23:42 [WARN]        longerfoo        longerbar        longerbaz

更长......

printf "%s [WARN] %16s %16s %16s" [`date +"%d/%b/%G-%T"`] muchlongerfoo muchlongerbar muchlongerbaz

02/Jun/2010-11:24:12 [WARN]    muchlongerfoo    muchlongerbar    muchlongerbaz

在控制台上试用。它有效。