如何比较和排序 2 个 csv 以显示差异

2023-12-13

您好,我有 2 个以下格式的 csv(基本上是电子邮件列表以及该发件人向我们发送电子邮件的次数):

文件1.csv

Email,Value     
[email protected],2    
e[email protected],4    
[email protected],1    
[email protected],6

文件2.csv

Email,Value    
[email protected],3    
e[email protected],6    
[email protected],8    
[email protected],2

每个表中的值可能不同,我想要做的是将结果输出到一个新的 CSV,如下所示:

文件3.csv

Email,Value1,Value2    
[email protected],2,3    
[email protected],4,6    
[email protected],1,8    
[email protected],6,2

我有一个bash我从其他地方获取的脚本,它完成了部分工作,但它没有列出我正在寻找的结果。

任何人都可以帮忙编写一个 bash 脚本吗?

#!/bin/bash

join -t"," -1 1 -2 1 -a1 file1.csv file2.csv | awk -F, ' BEGIN {  
    print "Email,Value"  
} NF > 3 {  
    if ( $3 != $5 )  
        print $1, $3, $5  
    if ( $2 != $4 )  
        print $1, $2, $4  
} ' OFS=, 

这是我使用以下命令得到的结果:

awk 'BEGIN{FS=OFS=","; printf "Name,Value1,Value2\n"}NR >1 && 
FNR==NR{map[$1]=$2; next}$1 in map{$(NF+1)=map[$1]; print}' file2.csv 
file1.csv  

结果:

Name,Value1,Value2
,[email protected],2
,[email protected],4
,[email protected],1
[email protected],6,2

Pretty 直截了当 with Awk!

awk 'BEGIN{FS=OFS=","; printf "Name,Value1,Value2\n"}NR >1 && FNR==NR{map[$1]=$2; next}$1 in map{$(NF+1)=map[$1]; print}' file2 file1

produces

Name,Value1,Value2
[email protected],2,3
[email protected],4,6
[email protected],1,8
[email protected],6,2

将输入和输出字段分隔符设置为, in the BEGIN在处理输入行之前执行的子句以及final需要的标头信息。那个部分FNR==NR按顺序运行第一个文件file2在这种情况下,创建一个哈希映射,并将索引设置为$1并将值设置为$2然后file1对于散列索引值属于的那些行$1创建一个新字段$(NF+1)意思是最后一个字段+1到新值并打印形成的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何比较和排序 2 个 csv 以显示差异 的相关文章

随机推荐

  • 如何使用 Python Urwid 制作类似聊天的 UI? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我已经可以使用 gevent 和 Zeromq 实现聊天守护进程 但我想为它们制作一个控制台 UI 我第一次尝试 ncurses 失败了 所以我尝试了Urwid并发现该项目nig
  • 用Java制作数字时钟

    我正在为一个项目制作一个数字时钟 我有四个课程 DigitalTimeUI 这是 JFrame 类 TitlePanel DigitPanel and ColonPanel 它们是所述项目的 JPanel 完成后 它应该看起来像这样 我坚持
  • 无法让 selenium webdriver 在 azure databricks 中工作

    我们有一些 python 脚本可以抓取网站并且运行良好 现在我们想在 Azure Databricks 中执行此操作 我们认为我们可以通过 Databricks 论坛中的以下帖子找到解决方案 但不幸的是 它不起作用 https forums
  • 将两个 datagridview 列合并为一个新列

    我想将两个 datagridview 列合并为一个新列 我首先将两个 col 的 Visible 属性更改为 false 然后尝试添加新的 col 该值必须格式化为以下 col1 Value 基金 col2 Value 是以上列的值 str
  • Ubuntu 中的 .gradle 目录在哪里?

    在 Windows 中 它是 C Users me gradle 但是Ubuntu呢 它在不同的位置吗 如果是的话 在哪里 我到处寻找但找不到它 它应该位于 HOME gradle gradle 和 或 项目特定
  • 如何将我的应用程序添加到 Android 默认拨号器选择中?

    我的问题是如何将我的应用程序添加到 android 默认拨号器选择中 更具体地说 而不使用 android intent action CALL PRIVILEGED 现在我正在使用下面的代码 效果很好
  • 从 React TypeScript 组件调用外部 Javascript 函数

    我有一个带有打字稿的 React Redux 应用程序 所以场景是这样的 我有一个包含一些javascript的index cshtml文件 现在 在我的 React 组件上 在 componentWillMount 函数的 Main ts
  • 使用 savefiledialog 保存图像时出现问题

    我正在使用 savefiledialog 来保存图像 画布是图片框 加载的图像是位图 当我尝试保存它时 文件已创建 但不知何故已损坏 因为当我尝试再次加载图像或在不同的查看器中显示时它不起作用 我的意思是保存的文件已损坏 有一种保存图像的方
  • 这个 LLVM 1.5 警告是什么意思? “没有‘id’的协议限定符已经过时了”

    我刚刚尝试使用 LLVM 1 5 编译器 包含在 XCode 3 2 3 中 编译 iOS 项目 并且收到了很多新警告 其中包括以下几个警告 protocol qualifiers without id is archaic 例如 这发生在
  • 标准化矩阵行,使其范数等于 1 (MATLAB)

    我有一个以下问题 我有一个矩阵A尺寸为 16x22440 我需要做的是对该矩阵的每一行进行归一化 使每行的范数等于 1 for n 1 16 norm A n 1 我怎样才能在matlab中实现这一点 编辑 该矩阵中的每一行都是由 160x
  • D3 径向树状图仅显示部分

    我根据 Mike Bostock 在 Observable 中的示例创建了下面的代码 我知道它与原始 d3 javascript 不同 https observablehq com d3 radial dendrogram 然而 它 仅当我
  • ios编程:使用线程将多个图像添加到库中

    在 Xcode 中 当我尝试添加超过 5 张图片到我的图书馆 它给了我以下错误 Error Domain ALAssetsLibraryErrorDomain Code 3301 Write busy UserInfo 0xa706aa0
  • 如何在 Today 扩展中发送和接收数据

    我想开发一个具有通知中心小部件的 iOS 应用程序 但我不知道应该如何在视图控制器和今日扩展之间发送和接收数据 传递数据 我尝试使用结构 但它不起作用 而且我也使用了应用程序组 但我不想使用这种方法 let shared NSUserDef
  • 以编程方式禁用 Android 中软输入键盘上的语音转文本按钮(麦克风)

    先谢谢您的帮助 我正在开发一个用于研究目的的 Android 应用程序 需要禁用软输入键盘上的语音到文本按钮 其原因是由于我正在开发的应用程序使用麦克风而出现并发问题 我知道对于一般应用程序来说 禁用按键通常被认为是不可能的 因为用户可能会
  • 使用 Spring Reactor 时为什么要使用断路器和隔板?

    请帮助我找到断路器和隔板模式在 Spring Reactor 应用程序中有用的原因 由于 Reactor 中的操作将是非阻塞的 并且这两种模式旨在节省对资源 主要是线程 的潜在影响 因此在什么情况下我可以使 Spring Reactor 应
  • 如何“独立”使用PolicyHttpMessageHandler?

    我只是想创建一个简单的测试 我使用DelegateHandlers实例化一个HttpClient无需带Asp net Core包 我有 2 个删除处理程序 ThrottlingDelegatingHandler PolicyHttpMess
  • 如何在闪亮中设置两个相关输入值(滑块和数字)的初始值?

    我已经在我闪亮的应用程序中定义了两个互连或相互依赖的输入 现在 我的问题是为这些滑块和数字输入设置特定的初始值 似乎他们总是从最小值开始 即使我现在也不知道为什么 如何指示这些输入参数的唯一起点或初始值 我附上了我的应用程序的简化部分 以便
  • 屏幕关闭时检测手机移动

    我正在开发一个应用程序 它应该检测用户的移动 当他停止超过 5 分钟时 它应该发出警报 我能够使用加速度计检测运动 但问题是屏幕关闭时它不起作用 我也尝试过使用部分wakeLock 重新注册加速度计也不起作用 这应该是摩托罗拉设备的解决方法
  • RegEx 在 Powershell 中匹配两个字符串之间的字符串

    这是我的示例数据 选项失败不匹配选项批处理开启选项确认关闭打开 sftp 用户名 电子邮件受保护 22 主机密钥 ssh rsa 1024 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 获取
  • 如何比较和排序 2 个 csv 以显示差异

    您好 我有 2 个以下格式的 csv 基本上是电子邮件列表以及该发件人向我们发送电子邮件的次数 文件1 csv Email Value email protected 2 e email protected 4 email protecte