读取输入文件时出错:密钥已过期



我目前正在制作一个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
    

最新更新