查找并删除两个文件中的重复项

查找并删除两个文件中的重复项

我有一个包含 30,000 个条形码的文件 File1 例如

A6KAIIYY
A6KFNRGY
X6LPXV55
X6LQ5217

我需要读取 file1,然后在另一个包含 35,000 个条形码的文件(file2)中搜索每个条形码,如果找到则删除该行。有没有办法可以编写 shell 脚本?

答案1

grep+mv解决方案:

grep -vf file1 file2 > /tmp/f2_tmp && mv /tmp/f2_tmp file2
  • -v- 选择不匹配的行
  • -f FILE- 获取模式FILE
  • /tmp/f2_tmp- 临时文件

答案2

如果 file1 中的所有条形码都在 file2 中,则连接两个文件,排序,并用于uniq -u仅打印唯一行(file2 中的那些不在 file1 中的行):

cat file file2 | sort | uniq -u

否则,对每个文件进行排序,并使用diff file1 file2,仅在文件 1 中的条形码将以 '<' 为前缀,而仅在文件 2 中的条形码将以 '>' 为前缀:

diff file1 file2 | grep -e '^> ' | sed 's/^> //'

相关内容