标题说明了一切。
我有4个awk进程记录到同一个文件,输出似乎很好,没有损坏,但我不确定只是重定向print
输出如下:print "xxx" >> file
在每个进程中是正确的方法做到这一点。
网站上有许多类似的问题,但这个问题特别关注awk以及解决问题的实用,代码正确的方法。
修改
对不起朋友们,我当然不是像我写的那样“只是重定向”,而是在追加。
答案 0 :(得分:3)
不,这不安全。
awk print "foo" > "file"
将打开文件并覆盖文件内容,直到脚本结束。
也就是说,如果您的4个awk进程在不同时间开始写入同一个文件,它们会覆盖彼此的结果。
要重现它,你可以像这样开始两个(或更多)awk:
awk '{while(++i<9){system("sleep 2");print "p1">"file"}}' <<<"" &
awk '{while(++i<9){system("sleep 2");print "p2">"file"}}' <<<"" &
同时你监控file
的内容,你会看到最后没有8“p1”和8“p2”。
使用>>
可以避免丢失条目。但是来自4个进程的输入序列可能会混乱。
修改强>
好的,>
是一个错字。
我不知道为什么你真的需要4个进程写入同一个文件。正如我所说,使用>>
,条目不会丢失(如果你的脚本工作正常)。但就我个人而言,我不会这样做。如果我必须有4个进程,我会写入不同的文件。好吧,我不知道你的要求,只是说一般。
输出到不同的文件使测试,调试更容易。想象当你的一个进程出现问题时,你想要解决它。等...
答案 1 :(得分:1)
我认为使用操作系统打印命令是保存。事实上,这将使用您提供的字符串作为日志附加文件写入缓冲区。因此,系统将管理数据到盘的实际写入过程,如果另一个进程想要使用相同的文件,系统将看到该资源已被声明并将等待第一个线程完成其处理,而不是允许写入缓冲区的第二个进程。