我想在命令输出的每一个新行中添加一个前缀。
我想这样做是因为我将在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
答案 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 &
如果这不是你所需要的,那么更新你的问题以显示一些更真实的代表性样本输入(在运行runcommand1 / runcommand2之后收到)和预期的输出。
答案 1 :(得分:0)
为输出的每一行添加前缀(或附加后缀)的最简单方法是通过replot
:
printf
如果需要在前缀后面打印一个空格,则可以进一步简化:
runcommand1 | xargs printf -n 1 '[prefix]%s\n' > logfile &
请注意,runcommand1 | xargs echo -n 1 '[prefix]' > logfile &
需要逐行直播流输出,而不是缓冲所有行。