仅查找 unix 中两个文件之间的差异(额外)

仅查找 unix 中两个文件之间的差异(额外)

我有2个文件。名称1.txt 和名称2.txt。

我需要知道哪些名称出现在names1.txt 中但在names2.txt 中缺失。然后我需要将它们存储在另一个文件missing_names.txt中。

Diff 命令给出了差异,但它也打印了很多信息。另外,我不想知道names2.txt 中但names1.txt 中缺少的名称。所以它就像 (names1.txt - names2.txt) 操作。

答案1

diff <(sort -u names2.txt) <(sort -u names1.txt) | 
  sed -n -e 's/^> //p' > missing_names.txt 

或者

diff <(sort -u names1.txt) <(sort -u names2.txt) | 
    sed -n -e 's/^< //p' > missing_names.txt 

其中任何一个都只会为您提供名称 1 中的名称,而不是名称 2 中的名称。

diff(没有任何输出格式选项,如-u)打印以(> 后跟一个空格)为前缀的添加内容和以(< 后跟一个空格)>为前缀的删除内容。如果存在的话,<脚本sed会从行的开头剥离它们,并且只打印修改过的(即匹配的)行。

答案2

cat name_1.txt | while read line
do
  grep -q "$line" name_2.txt
  if [ "$?" -gt "0" ]; then
     echo "$line" >> name_3.txt
  fi
done

笔记:假设name_1.txtname_2.txt只包含名称。

相关内容