我的脚本有两个部分。首先,它将执行一个2 java类并将输出写入2个不同的文本文件,每个文件的输出很大(10000行)。第二,执行此命令后,它将同时开始同时读取这两个文件并进行处理。
java -cp ./weka.jar weka.classifiers.functions.SMO -t /Users/mainulquraishi/Documents/sentiment_directory/2014/Books/training/representation${i}_by_${i}.arff -no-cv -T /Users/mainulquraishi/Documents/sentiment_directory/2014/Books/representations/representation2014_by_${i}.arff -v -o >>test1.txt
java -cp ./weka.jar weka.classifiers.functions.SMO -t /Users/mainulquraishi/Documents/sentiment_directory/2014/Books/training/representation${i}_by_${i}.arff -no-cv -T /Users/mainulquraishi/Documents/sentiment_directory/2014/Books/representations/representation2014_by_${i}.arff -v -o >>test2.txt
while read compareFile1 <&3 && read compareFile2 <&4; do
#Here the processing goes
done 3<test1.txt 4<test2.txt
现在,我的问题是,是否有可能在完成两个文件的写入之前,程序的第二部分可能会启动(两个部分都在同一个程序文件中)? 如果答案是肯定的,我怎么能向我的程序发出信号,表明两个文件的写入都已完成?或任何其他技术高度赞赏。
答案 0 :(得分:1)
您可以使用流程替换,这是一个简化示例:
while read -d" " v1 <&3 && read -d" " v2 <&4; do
echo "v1:$v1 v2:$v2";
done 3< <(echo "1 2 3 ") 4< <(echo "9 8 7 ")
使用输出生成命令...
,而不是<(
后面的echo命令
请注意,要读取的-d" "
参数只需要将读取空间分隔为单词而不是行 - 只是为了使示例保持较小。