Bash 两个文本文件比较脚本

Bash 两个文本文件比较脚本

给定两个文件,我想编写一个 shell 脚本,从文件 1 中读取每一行并检查它是否在文件 2 中。如果在文件 2 中找不到某行,则应将其保存在表 TAB1 中。此外,如果文件 2 中存在文件 2 中没有的其他行,则应将其保存在表 TAB2 中。

文件可以包含单词、数字或任何内容。例如:

文件1:

Hi!
1234
5678
1111
hello

文件2:

1111
5678
1234
Hi!
hellothere

在这种情况下,TAB1 中应该有“hello”,TAB2 中应该有“hellothere”

如果两个文件相等,我希望返回“文件相等”回显或类似的内容。

我该怎么做?我尝试过 diff,但没有成功。

提前致谢

答案1

首先,您需要对每个文件进行排序。然后您需要使用。最后,您可以使用comm提取生成的列。因此,就像这样。commawk

#! /bin/bash
sort $1 > $1.sorted
sort $2 > $2.sorted
comm -3 $1.sorted $2.sorted > columns
if [ -s columns ]; then
  TAB1="$(awk '{ print $1 }' < columns)"
  TAB2="$(awk '{ print $2 }' < columns)"
  # do something with TAB1 and TAB2
else
  echo $1 and $2 contain the same data
fi

你可以像这样调用这个脚本:

./myscript file1 file2

使用 使脚本可执行后chmod

相关内容