给定两个文件,我想编写一个 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
提取生成的列。因此,就像这样。comm
awk
#! /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
。