我想在我的命令输出的每个新行添加一个前缀。
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 &
或
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后接收)和预期产出。
这是不同的程序试图同时写一个常规文件吗?我认为你应该序列化日志记录任务,以便不可能产生破坏输出。也许为不同的进程使用不同的日志文件。请参阅http://stackoverflow.com/questions/15384331/unix-can-i-write-to-the-same-file-in-parallel-without-missing-entries –