linux - 有没有办法一次比较 N 个文件,并且只保留每个文件唯一的行?
问题描述
背景
我有五个文件,我试图使它们彼此唯一。换句话说,我想让每个文件中的文本行彼此没有共性。
尝试的解决方案
到目前为止,我已经能够运行 grep -vf 命令将一个文件与其他 4 个文件进行比较,如下所示:
grep -vf file2.txt file1.txt
grep -vf file3.txt file1.txt
...
这使它打印出 file1 中不在 file2 和 file3 中的行,等等。但是,这变得很麻烦,因为我需要为所有文件的超集执行此操作。换句话说,要真正将每个文件缩减为仅在该文件中的文本行,我必须将文件的每个组合都放入 grep -vf 命令中。鉴于这对我来说听起来很麻烦,我想知道...
问题
linux中用于查找每个文件中与所有其他文件互斥的文本行的命令/命令系列是什么?
解决方案
你可以这样做:
awk '!a[$0]++ { out=sprintf("%s.out", FILENAME); print > out}' file*
这会将 uniq 中的行file
写入file.out
. 每一行都将被写入它第一次出现的相关输入文件的输出文件中,并且同一行的后续重复将被抑制。
推荐阅读
- amazon-web-services - 将静态网站内容的 zip 文件上传到 S3,但网站显示错误 404
- visual-studio - 新的 ASP.NET Core 项目存在构建错误?
- facebook - 显示网站从 Facebook 登录获得的数据
- python - 是否可以重新训练以前保存的 keras 模型?
- python - 从格式化为列/行的python-numpy矩阵获取列/行向量
- vba - 同时循环遍历一行中的所有单元格和一个命名范围
- java - 使用Spring Boot时如何运行所有测试类但只启动嵌入式Tomcat一次?
- mysql - 在类似查询的 mysql 中包含点运算符
- css - 启动时的 Angular Material Dialog 组件滚动问题
- r - 给定一个日期范围,如何扩展到该范围内的每月天数?