在 bash 命令输出中添加前缀

Lom*_*ric 5 bash logging awk

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

我想这样做,因为我将并行运行多个命令,这些命令将记录在同一输出日志中。

我尝试使用 AWK 执行此操作,但没有成功

runcommand1 | "[prefix1]" + log > logfile &
runcommand2 | "[prefix2]" + log > logfile &
Run Code Online (Sandbox Code Playgroud)

结果日志将是

[prefix1] bla bla
[prefix2] blo blo blo
[prefix1] other bla
[prefix1] other bla
[prefix2] other blo blo
Run Code Online (Sandbox Code Playgroud)

Aks*_*gde 9

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

runcommand1 | "[prefix1]" + log > logfile &
runcommand2 | "[prefix2]" + log > logfile &
                                ^
    Second one will overwrite first opened logfile
    you have to append ">>" second one  
Run Code Online (Sandbox Code Playgroud)

下面提到的几个命令可能会对您有所帮助。

您可以使用sed

yourcommand1 | sed  's/^/[prefix1] /' > logfile &
Run Code Online (Sandbox Code Playgroud)

您可以使用awk

yourcommand1 | awk '{ print "[prefix1]", $0 }' > logfile &
yourcommand2 | awk '{ print "[prefix2]", $0 }' >> logfile &
Run Code Online (Sandbox Code Playgroud)

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

yourcommand1 | awk -v prefix="[prefix1]" '{ print prefix, $0 }' > logfile &
yourcommand2 | awk -v prefix="[prefix2]" '{ print prefix, $0 }' >> logfile &
Run Code Online (Sandbox Code Playgroud)

或者

mystring1="[prefix1]"
mystring2="[prefix2]"
yourcommand1 | awk -v prefix="$my_string1" '{ print prefix, $0 }' > logfile &
yourcommand2 | awk -v prefix="$my_string2" '{ print prefix, $0 }' >> logfile &
Run Code Online (Sandbox Code Playgroud)

如果这不是您需要的全部,请更新您的问题以显示一些更真正具有代表性的示例输入(您在运行 runco​​mmand1/runco​​mmand2 后收到)和预期输出。