我正在运行一个运行良好的脚本。然而,昨天,我有一些错误。 这些错误发生在脚本的几个循环之后:
sed: cant read file3.txt: No such file or directory
grep: file3.txt: No such file or directory
grep: file3.txt: No such file or directory
sed: cant read file3.txt: No such file or directory
grep: file3.txt: No such file or directory
请记住,这些错误并非始终如一。它偶尔发生在脚本这一部分附近的某个地方。 File3.txt是找不到的文件:
cat file1.txt | while read LINE; do grep -m 1 $LINE file2.txt >> file3.txt; done
sed -i 's/string//g' file3.txt
grep 'string' file3.txt | cut -d '|' -f1-2 > file4.txt
grep -v 'string' file3.txt | cut -d '|' -f1-2 >> file5.txt
sed -i 's/string//' file3.txt
grep -Fvf file3.txt file1.txt > file6.txt
现在,我想是因为附加了file3.txt,或者稍后由SED操作,有时下一个命令启动太快而无法找到该文件?我应该在其间放一个等待命令吗?
我查找了很多有此错误的网页,但无法找到任何内容:
如果您认为等待或睡眠命令会有所帮助,请告诉我。或者,如果您认为有更好的解决方案,那也会很棒。我在Cygwin终端上运行。非常感谢任何见解。
答案 0 :(得分:3)
不是重定向到file3.txt
循环内的while
,而是重定向整个循环。然后,即使循环从不运行,也会创建该文件,因为输入文件为空。
while read LINE; do
grep -m 1 $LINE file2.txt
done < file1.txt > file3.txt
答案 1 :(得分:1)
如果file1.txt为空,则不会创建file3.txt。
答案 2 :(得分:1)
如果存在关键字符(空间是最简单的字符),do grep -m 1 $LINE file2.txt
也会导致问题
我们假设$LINE
变量包含多个以空格分隔的单词:hello world
现在命令看起来像这样:grep -m 1 hello world file2.txt
- grep解释看起来像这样:让我们在名为hello
的文件中找到所有world
,在当前文件夹中找到名为file2.txt
的文件。 / p>
使用"$LINE"
代替$LINE
会引导您完全不同的情况
看看以下两者之间的区别:
grep -m 1 $LINE file2.txt
grep -m 1 "$LINE" file2.txt