linux文件交集差集

 

linux文件交集差集


目录(?)[+]

comm命令:

comm file1 file2

在没有指定可选参数,默认会输出三列: 只在file1中的数据,只在file2中的数据以及file1和file2的交集。也可以指定如下参数:

[plain]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. -1              suppress column 1 (lines unique to FILE1)  
  2. -2              suppress column 2 (lines unique to FILE2)  
  3. -3              suppress column 3 (lines that appear in both files)  

e.g.

[plain]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. cat a.txt   
  2. a  
  3. b  
  4. c  
  5. d  
  6. e  
  7. f  

[plain]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. cat b.txt    
  2. a  
  3. b  
  4. c  
  5. e  
  6. w  

[plain]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. comm a.txt b.txt   
  2.                 a  
  3.                 b  
  4.                 c  
  5. d  
  6.                 e  
  7. f  
  8.         w  


求两个文件的交集
[plain]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. comm -12 a.txt b.txt   
  2. a  
  3. b  
  4. c  
  5. e  

求两个文件的差集

在file2不在file1中的数据

[plain]  view plain  copy

  1. comm -13 a.txt b.txt    
  2. w  


在file1不在file2中的数据
[plain]  view plain  copy
 
  在CODE上查看代码片 派生到我的代码片
  1. comm -23 a.txt b.txt    
  2. d  
  3. f  
Linux中,没有直接的内置命令用于执行两个集合之间的差集操作,即返回所有在第一个集合中但不在第二个集合中的元素。但是,你可以使用一些组合命令或者外部工具来实现这个功能。最常用的工具有`comm`(交集差集)、`awk`或`cut`等。 以下是几个常用方法: 1. **Using `comm` command with `-23` option**: 这个命令比较两个文件的内容,并显示只有第一个文件中存在的行。 ```sh comm -23 file1.txt file2.txt > diff.txt ``` `file1.txt` 和 `file2.txt` 分别是你想要做差集的两个文件,结果将保存到`diff.txt`。 2. **Using `awk` and `uniq`**: ```sh awk 'FNR==NR {a[$0];next} !($0 in a)' file2.txt < file1.txt ``` 把较小的那个文件作为输入(`< file1.txt`),较大的那个文件的内容存储在一个数组`a`中,然后逐行读取另一个文件,查找不在`a`中的行。 3. **Using `cut` and `sort`** (假设两个文件按同一字段分隔): ```sh cut -d ',' -f 1 file1.txt | sort | uniq -u > diff.txt ``` 首先切割两个文件的第一列(或其他指定列),然后对第一列排序并找出唯一值,即差集。 注意,以上示例假设你的数据是以某种形式(如逗号分隔或行分隔)组织的。如果你的数据是复杂的数据结构(如JSON或XML),可能需要更复杂的解析或转换步骤。 **相关问题--:** 1. 在Linux中,如何使用`comm`命令计算三个文件差集? 2. 如果我想在命令行中处理非文本格式的数据,如CSV,上述方法还有效吗? 3. 是否存在其他更适合处理大数据量的差集操作工具?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值