我有一个包含 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/^> //'