如何将哈希列表(逐行)与另一个哈希列表进行比较?

如何将哈希列表(逐行)与另一个哈希列表进行比较?

(使用 Bash)我试图将一个哈希列表与另一个哈希列表进行比较;我正在考虑为每一行使用嵌套的 for 循环或 while 循环,然后使用 if 语句。将第一行与第二个文件的内容/每一行进行比较,依此类推。

for a in 'cat file1.sh'   
    do
    echo $a
           for b in 'cat file2.sh'
               do
               echo $b
                   if [ "$a" == "$b" ]
                   then
                   echo $a $b
                   fi


done
done

我意识到我在这里遗漏了一个关键的比较。我尝试将第一个文件的第一行与第二个文件的每一行/哈希进行比较;然后一旦找到匹配项,就将其附加到新文件并转到第一个文件的第二行,然后重复该过程,直到尝试了所有匹配比较并将匹配结果附加到新文件。

答案1

$ join <( sort hashes1 ) <( sort hashes2 )

这将返回hashes1和中的所有hashes2相同的行。

要获得不相同的:

$ join -v 1 <( sort hashes1 ) <( sort hashes2 )

$ join -v 2 <( sort hashes1 ) <( sort hashes2 )

第一个命令将显示第一个文件中不在第二个文件中的所有哈希值,而第二个命令将执行相反的操作。

有关更多信息,请参阅 的手册join


您的脚本存在三个主要问题:

  1. 'cat file1.txt'只是一个文本字符串。如果你想要file1.txt你会使用的内容$( <file1.txt )

  2. 获取文件的完整数据然后使用 循环遍历它并不是一个好主意for。对于较大的文件,这只是浪费内存。反而:

    while IFS= read -r line; do
      ...
    done <file1.txt
    

    有关 的信息IFS= read -r,请参阅理解“IFS=读取-r行”吗?

  3. 你也应该引用你的变量

相关内容