我有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.txt
和name_2.txt
只包含名称。