![如何将哈希列表(逐行)与另一个哈希列表进行比较?](https://linux22.com/image/103973/%E5%A6%82%E4%BD%95%E5%B0%86%E5%93%88%E5%B8%8C%E5%88%97%E8%A1%A8%EF%BC%88%E9%80%90%E8%A1%8C%EF%BC%89%E4%B8%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%93%88%E5%B8%8C%E5%88%97%E8%A1%A8%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83%EF%BC%9F.png)
(使用 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
。
您的脚本存在三个主要问题:
'cat file1.txt'
只是一个文本字符串。如果你想要file1.txt
你会使用的内容$( <file1.txt )
。获取文件的完整数据然后使用 循环遍历它并不是一个好主意
for
。对于较大的文件,这只是浪费内存。反而:while IFS= read -r line; do ... done <file1.txt
有关 的信息
IFS= read -r
,请参阅理解“IFS=读取-r行”吗?你也应该引用你的变量。