背景
我在execution.sh
cat input_file | tee output_file | java program
我成功地使用./execution.sh &
读取input_file,将数据存储在单个output_file中,并作为输入发送到java程序。
问题
我希望将input_file
的数据多次输出到output_file
以及java程序。
e.g。同时阅读input_file
相同的5次并将数据发送到单个output_file
和单个java program
。
修改
尝试过的解决方案
execution.sh
{
python2 readLines.py &
python2 readLines.py &
python2 readLines.py &
python2 readLines.py &
python2 readLines.py &
} | tee output_file | java program
readLines.py
with open('inputfile') as f:
for line in f:
print line
我目前正在使用此功能,如果有任何人看到竞争条件等问题,请发表评论。
答案 0 :(得分:2)
读取相同的input_file并行5次并将数据发送到单个output_file和单个java程序
让我们忽略» parallel «部分。写作只能顺序。
( for i in {1..5}; do cat input_file; done ) | tee out_file | java program
或简而言之
cat input_file{,,,,} | tee out_file | java program
两个命令连续5次打印文件。
如果您真的想用并行编写,可以将cat
命令作为后台作业启动:
( for i in {1..5}; do cat input_file & done ) | tee out_file | java program
此方法保证output_file
包含来自input_file
的所有字节恰好五次,但(当然)交错。很有可能不仅行,而且字节最终交错。这是什么意思?
如果你有文件
abc
xyz
并行打印两次,输出可能会变为
ababcc
xxyz
yz
如果这不打扰你,还要记住,如果没有出现在那个序列中,有一些字节序列会丢失/改变它们的含义,例如windows new lines \r\n
或multibyte unicode characters。