在bash命令输出中添加前缀

时间:2017-02-27 09:49:44

标签: bash logging awk

我想在命令输出的每一个新行中添加一个前缀。

我想这样做是因为我将在parralel whiches中运行多个命令将登录相同的输出日志。

我试图用AWK做这件事但没有成功

runcommand1 | "[prefix1]" + log > logfile &
runcommand2 | "[prefix2]" + log > logfile &

结果日志是

[prefix1] bla bla
[prefix2] blo blo blo
[prefix1] other bla
[prefix1] other bla
[prefix2] other blo blo

2 个答案:

答案 0 :(得分:2)

  

我想在命令输出的每一个新行中添加一个前缀。

runcommand1 | "[prefix1]" + log > logfile &
runcommand2 | "[prefix2]" + log > logfile &
                                ^
    Second one will overwrite first opened logfile
    you have to append ">>" second one  

下面提到的一些命令可能对您有帮助。

您可以使用sed

yourcommand1 | sed  's/^/[prefix1] /' > logfile &

您可以使用awk

yourcommand1 | awk '{ print "[prefix1]", $0 }' > logfile &
yourcommand2 | awk '{ print "[prefix2]", $0 }' >> logfile &

如果你想将前缀字符串传递给awk那么

yourcommand1 | awk -v prefix="[prefix1]" '{ print prefix, $0 }' > logfile &
yourcommand2 | awk -v prefix="[prefix2]" '{ print prefix, $0 }' >> logfile &

OR

mystring1="[prefix1]"
mystring2="[prefix2]"
yourcommand1 | awk -v prefix="$my_string1" '{ print prefix, $0 }' > logfile &
yourcommand2 | awk -v prefix="$my_string2" '{ print prefix, $0 }' >> logfile &

如果这不是你所需要的,那么更新你的问题以显示一些更真实的代表性样本输入(在运行runco​​mmand1 / runco​​mmand2之后收到)和预期的输出。

答案 1 :(得分:0)

为输出的每一行添加前缀(或附加后缀)的最简单方法是通过replot

printf

如果需要在前缀后面打印一个空格,则可以进一步简化:

runcommand1 | xargs printf -n 1 '[prefix]%s\n' > logfile &

请注意,runcommand1 | xargs echo -n 1 '[prefix]' > logfile & 需要逐行直播流输出,而不是缓冲所有行。