在特殊格式用printf打印值(Printing values in special format

2019-10-22 14:40发布

我需要的printf作为打印以下值follwoing周围是这样的:

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

所需的输出:

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

的val2和从val2次到VAL3 VAL1之间的间隙必须是const间隙不依赖于值的长度

Answer 1:

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

不知道你的间隙不变是什么意思。 如果它是一个列宽foobarbaz ,尝试%13s ,其中13是最小列宽。



Answer 2:

我明白你的问题。 用另一种答案为矿山基地:

如果你想垫每个PARAMS的则只需添加一个数字参数传递给printf和它会垫出来到该号码每场的字符。

垫由20个字符:printf的“%S [WARN]%20S%20S%20S” date +"%d/%b/%G-%T" FOO酒吧巴兹

例子:

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

试一试在控制台上。 有用。



文章来源: Printing values in special format using printf