【发布时间】:2014-03-31 22:02:45
【问题描述】:
我有一个while循环,简化如下:
while read -r line
do
(delete some lines from file2.txt)
done < file.txt
如果file2.txt 为空,则此while 循环不再需要运行。
换句话说,我需要这个:
while read -r line AND file2.txt IS NOT EMPTY
do
(delete some lines from file2.txt
done < file.txt
我尝试将while read -r line 与-s file2.txt 结合,但结果不起作用:
while [ read -r line ] || [ -s file2.txt ]
do
(delete some lines from file2.txt)
done < file.txt
如何使用此 while 循环读取文件中的行,同时检查另一个文件是否为空?
【问题讨论】:
-
您可以在
(delete some lines from file2.txt)之后的原始while循环中放置一个if (file2.txt is empty check) ; then break ; fi。我不确定您是如何从file2.txt中删除行的,因此不确定您要进行什么“空”检查。 -
我使用
sed -i "/$line/d" ./file2.txt从file2.txt中删除内容,这是在while 循环进行时发生的。发生的情况是,file2.txt很快就会变空,但while loop会不必要地持续几分钟。如果我将if条件放在while条件中,我认为脚本不会加速。 -
@Village 还有什么东西在这个文件中添加了行吗?您是否正在实施队列?如果您愿意,您可能需要考虑使用 fifo(请参阅
mkfifo)。我只是不确定sed -i是否足够原子
标签: bash while-loop