![Bash 脚本:比较两个文本文件](https://linux22.com/image/943109/Bash%20%E8%84%9A%E6%9C%AC%EF%BC%9A%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6.png)
我想知道如何有效地做到这一点。给定两个文件,例如 a.txt 和 b.txt,我想编写一个 bash 脚本来执行以下操作:
a.txt 中每一行包含 '*',而在 b.txt 中不存在的行都将添加到 b.txt 的末尾,并带有时间戳。
我可以完成第一部分和最后一部分,
grep "*" a.txt echo "$(date)" >> b.txt
但我不知道其余部分怎么办。
答案1
我建议您使用第三个文件来获取结果,这样您就不会弄乱 b.txt 文件。您可以尝试以下操作:
cp b.txt c.txt
for line in $(grep '*' a.txt); do
# for each line found in a.txt
echo "Found: $line"
grep -q $line b.txt # check its presence in b.txt
if [ $? -ne 0 ]; then
# if the result of the grep is not equal to 0
# it means that the line has not been found in b.txt
# then print the line in a third file with the leading timestamp
echo "$(date): $line" >> c.txt
fi
done
很明显,也许你应该改进 grep,因为我不知道你搜索的“*”的行是如何组成的。