(使用 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行”吗?你也应该引用你的变量。