Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Unix比较两个以管道分隔的文件

使用Unix比较两个以管道分隔的文件
EN

Stack Overflow用户
提问于 2021-07-07 10:56:03
回答 1查看 61关注 0票数 2

File_1.txt

代码语言:javascript
运行
AI代码解释
复制
emp_id|emp_name|emp_dob
111|Alex|08/29/1994
222|John|05/12/1997
333|Sam|08/24/1987

File_2.txt

代码语言:javascript
运行
AI代码解释
复制
emp_id|emp_dob|emp_name
111|08/29/1994|Alex
444|05/12/2000|John
222|05/12/1997|Brad

需要使用标题(head -1 File_1.txt)中提到的列来比较File_1.txtFile_2.txtemp_id可用于连接条件

经过比较,应该会生成以下文件

根据emp_idMismatch.txt ##包含不匹配的值

代码语言:javascript
运行
AI代码解释
复制
File_name|column_name|emp_id|File_1_value|File_2_value
File 1|emp_name|222|John|Brad

Missing_Rows.txt ##包含文件%1或文件%2中缺少的emp_id%s

代码语言:javascript
运行
AI代码解释
复制
File_name|emp_id
File 1|444
File 2|333

我可以使用join命令连接这两个文件,但找不到丢失和不匹配的行的详细信息。

代码语言:javascript
运行
AI代码解释
复制
join -j1 -t'|' -o1.1,1.2,1.3,2.1,2.2,2.3 <(cat  File_1.txt|awk -F'|' '{print $0}'|sort  -t '|' -k1,1)<( cat  File_2.txt|awk -F'|' '{print $0}'|sort -t '|' -k1,1) > joinfile.txt`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 09:55:30

使用您显示的示例,请尝试以下awk代码。它将根据需要创建名为Mismatch.txtMissing_Rows.txt的2个输出文件。

代码语言:javascript
运行
AI代码解释
复制
awk '
BEGIN{
  FS=OFS="|"
  print "File_name|column_name|emp_id|File_1_value|File_2_value" > "Mismatch.txt"
  print "File_name|emp_id" > "Missing_Rows.txt"
}
FNR==NR{
  empId1[$1]=FILENAME OFS $0
  empId2[$1]=$2
  empVal[$1,$2]=$0
  next
}
{ empId3[$1] }
!($1 in empId1){
  print (FILENAME,$1) > "Missing_Rows.txt"
  next
}
($1 in empId1) && !(($1,$3) in empVal){
  print (FILENAME,empId2[$1],$NF) > "Mismatch.txt"
}
END{
  for(i in empId1){
    if(!(i in empId3)){
      split(empId1[i],arr,"|")
      print (arr[1],arr[2]) > "Missing_Rows.txt"
    }
  }
}
' file1.txt file2.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68284716

复制
相关文章
[Linux] 使用awk比较两个文件的内容
当需要比较A , B两个文件 , A文件中存在 , 并且把也在B文件中存在的行去除掉 , 可以使用这个awk的用法来
唯一Chat
2019/12/26
2.9K0
python比较两个文件的差异
使用python脚本比较两个文件的差异内容并输出到html文档中,可以通过浏览器打开查看。
py3study
2020/01/07
4.6K0
UNIX(进程间通信):08 管道通信
匿名管道是进程间通信中比较简单的一种,他只用于有继承关系的进程,因为匿名,非继承关系的进程无法找到这个管道,也就无法完成通信,而有继承关系的进程,是通过fork出来的,父子进程可以获得得到管道。进一步来说,子进程可以使用继承于父进程的资源,但是他无法使用叔伯进程的资源。管道通信的原理如下:
用户3479834
2021/03/04
1.1K0
UNIX(进程间通信):08 管道通信
使用 Meld 在 Linux 中以图形方式比较文件和文件夹
如何比较两个相似的文件来检查差异?答案显而易见,就是使用 Linux 中的 diff 命令。
用户8639654
2021/09/10
3.8K0
比较两个vcf文件的多种实现方法
可以看到,新的vcf文件的突变位点数量远大于旧的vcf文件。仔细查看新vcf文件,**发现是没有做基本过滤,比如测序深度大于20等等指标。**所以我就顺便把它过滤一波,代码如下:
生信技能树
2020/07/16
2.9K0
比较两个vcf文件的多种实现方法
python 快速比较两个文件的不同
import difflib a = open('./1.txt', 'U').readlines() b = open('./2.txt', 'U').readlines() diff = difflib.ndiff(a, b) print(diff) for i in diff: print(i) # if i.startswith('+'): # print(i) #or print(set(b)-set(a))
周小董
2019/03/25
3.4K0
Matlab以特殊分隔符写入txt(dlmwrite)
  原始数据是1 23 4 78675645,表示用户1对项目23的平分为4,评分的unix时间为78675645。
全栈程序员站长
2022/07/19
4110
Java String类的Split以竖线作为分隔符
Java中String类的Split方法,当用“|”进行分割时,发现并不能达到预期的效果。比如:分割字符串“ABC|DEF”,得到的String{}结果是 “ A B C | D E F ”
程序新视界
2022/11/30
2K0
UNIX(进程间通信):09 管道到底是什么
有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。
用户3479834
2021/03/04
1.2K0
UNIX(进程间通信):09 管道到底是什么
以管道的方式来完成复杂的流程处理
之前参与一个机票价格计算的项目,为他们设计了基本的处理流程,但是由于整个计算流程相当复杂,而且变化非常频繁,导致日常的修改、维护和升级也变得越来越麻烦,当我后来再接手的时候已经看不懂计算逻辑了。为了解决这个问题,我借鉴了“工作流”的思路,试图将整个计算过程设计成一个工作流。但是我又不想引入一个独立的工作流引擎,于是写了一个名为Pipelines的框架。顾名思义,Pipelines通过构建Pipeline的方式完成所需的处理流程,整个处理逻辑被分解并实现在若干Pipe中,这些Pipe按照指定的顺序将完成的Pipeline构建出来。Pipeline本质上就是一个简单的顺序工作流,它仅仅按序执行注册的Pipe。这个简单的Pipelines框架被放在这里,这里我不会介绍它的设计实现,只是简单地介绍它的用法,有兴趣的可以查看源代码。
蒋金楠
2023/07/10
2480
以管道的方式来完成复杂的流程处理
.NET 下最快比较两个文件内容是否相同
为了选出最优的解决方案,我搭建了一个简单的命令行工程,准备了两个大小为912MB的文件,并且这两个文件内容完全相同.在本文的最后,你可以看到该工程的Main方法的代码.
郑子铭
2023/08/30
3530
.NET 下最快比较两个文件内容是否相同
LeetCode 1043. 分隔数组以得到最大和(DP)
给出整数数组 A,将该数组分隔为长度最多为 K 的几个(连续)子数组。分隔完成后,每个子数组的中的值都会变为该子数组中的最大值。
Michael阿明
2020/07/13
6390
LeetCode 1043. 分隔数组以得到最大和(DP)
Scala实现两个对象的比较
使用隐式对象 implicit object 继承 Ordering[T]类,重写compare方法实现
静谧星空TEL
2021/04/27
1.8K0
Scala实现两个对象的比较
linux比较两个目录的差异
原文链接:https://rumenz.com/rumenbiji/linux-compare-dir.html
入门笔记
2021/11/28
3K0
java中字符串以逗号分隔的转换为List方法
List<String> split= Arrays.asList(str.split(","));
IT工作者
2022/05/05
7.1K0
linux比较两个目录的差异
diff 给定两个目录,如何找出哪些文件因内容不同 > diff --brief --recursive dir1/ dir2/ --brief仅显示有无差异 或者使用 > diff -qr dir1/ dir2/ -q 仅显示有无差异,不显示详细的信息 -r 比较子目录中的文件 git > git diff --no-index dir1/ dir2/ 可以显示颜色差异 rsync > rsync -rvn -i --delete dir1/ dir2 | sed -n '2,/^$/{/^$/
入门笔记
2022/06/02
2.4K0
Linux - pipe() 管道的使用
pipe , 中文翻译为管道,是 Unix/Linux 系统中一种比较常用的 IPC(Inter Process Communication) 。下面这组 shell 命令,估计大部分人都用过或者见过。
Spell Thief
2020/10/31
10.1K0
Linux - pipe() 管道的使用
在Mybatis的collection标签中获取以,分隔的id字符串
有的时候我们把一个表的id以逗号(,)分隔的字符串形式放在另一个表里表示一种包含关系,当我们要查询出我们所需要的全部内容时,会在resultMap标签中使用collection标签来获取这样的一个集合。
算法之名
2019/08/20
3.8K0
在Mybatis的collection标签中获取以,分隔的id字符串
UNIX 文件系统结构 -- UFS
如图所示,系统由 MBR(主引导区)引导启动,载入分区表,加载 VFS,文件系统开始进入工作状态。 每个分区维护自己的超级块,用于描述文件系统类型等的关键参数。 空闲空间表即指向空闲块的链表或指针数组。 i 节点表中的每个 i 节点对应一个文件,指向若干数据块,文件即由各个数据块连接而成,i 节点包含了文件属性、物理地址等信息(stat 数据结构除 i 节点编号和文件名的全部信息) 相同的硬链接指向同一个 i 节点,而符号链接只是数据块包含指向信息的 S_IFLINK 类型的文件,图中展示了一个硬链接的例子。 目录也是文件,但指向一个目录块的 i 节点至少要被两个目录块指向(即一个目录至少包含两个目录,分别是 . 与 ..)
用户3147702
2022/06/27
8560
UNIX 文件系统结构 -- UFS
点击加载更多

相似问题

比较两个unix时间文件以删除旧文件

12

Unix命令将制表符分隔文件转换为管道分隔文件

62

比较两个以制表符分隔的文件

30

比较Unix中两个文件的差异以生成bool

19

Unix使用comm比较两个CSV文件

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文