我目前正在制作一个bash脚本。此脚本的用途并不重要。但是,我有一段代码正在生成错误。错误如下:
./script.bs: line 175: read: read error: 0: Key has expired
./script.bs: error reading input file: Key has expired
我有下面的代码第 175-189 行。
此特定代码段执行以下操作:- 读取一个 txt 文件,其中包含目标文件的列表。-对于每个目标文件,读取每一行。如果这条线包含在$NumbersFile中,它将无济于事。如果该行不包含在$NumbersFile中,则会将该行添加到 NumbersFile。
这段通用代码正在工作,并在$NumbersFile中添加了 65810 行内容。但是,它随后得到了我上面提到的错误。
我想补充一点,第 175 行(发生错误的地方(上的 while 循环应该从给定文件中读取大约 70'000 行。
如何修复此错误,以便我的脚本可以完成运行而不会出现密钥过期错误?
NumbersFile="numbers.txt";
while read line; do
while read gramline; do
has="0";
if grep -Fq -- "$gramline" "$NumbersFile"; then
has="1";
fi
if [ "$has" -eq "0" ]; then
echo "$gramline" >> $NumbersFile;
fi
done < "$line";
done < "targetsfile.txt";
的评论是准确的,也许这可能会更快:
{ cat targetsfile.txt; xargs cat < targetsfile.txt; } | sort -u > numbers.txt
或如澄清:
xargs cat < targetsfile.txt | sort -u > numbers.txt
笔记:
- 大括号只是为了对 CAT 和 XARGS 命令进行分组,以便组合输出可以通过管道传输到
sort
中。记录在手册中的 3.2.4.3 分组命令 - 第一个
cat
输出"目标文件.txt"文件的内容 xargs cat < targetsfile.txt
构造将为目标文件中列出的每个文件执行cat
命令。这是一种非常简洁高效的执行方式while IFS= read -r line; do cat "$line"; done < targetsfile.txt