shell 脚本中的 AWK - 如何根据共享密钥(2 个公共字段)比较和合并两个文件?

2024-01-11

有人可以帮忙比较两个文件吗? 我已经使用了下面的命令,但我无法成功,

awk -F, 'NR == FNR {a[$1,$2];下一个} (($1,$2) in a )' temp1.dat temp2.​​dat

这是我的需要, 需要比较以下两个 dat 文件中的前两个字段,并将结果按预期合并到 file3 中(第一个字段、第二个字段、temp1.dat 的 3 字段、temp2.​​dat 的 3 字段)

文件1:temp1.dat

A, AB,100
B,BB,200
C,CC,300

文件2:temp2.​​dat

A,AB,10
C,CC,30
D,DF, 4

文件3:输出

A, AB,100,10
C,CC,300,30

awk -F, 'BEGIN{OFS=","}FNR==NR{a[$1$2]=$3;next}($1$2 in a && $3=$3","a[$1$2])' file2 file1

测试如下:

> cat file1
A,AB,100
B,BB,200
C,CC,300
> cat file2
A,AB,10
C,CC,30
D,DF,4
> awk -F, 'BEGIN{OFS=","}FNR==NR{a[$1$2]=$3;next}($1$2 in a && $3=$3","a[$1$2])' file2 file1
A,AB,100,10
C,CC,300,30
> 
  • FNR==NR{a[$1$2]=$3;next}应用于第一个文件file2
  • 它说直到FNR==NR执行代码块。
  • FNR=当前文件的行号
  • NR= 两个文件总行数。
  • 因此,在上述语句之后,索引为的关联数组为$1$2和价值为$3.
  • Now ($1$2 in a && $3=$3","a[$1$2])这执行的是FNR!=NR.其中检查索引 $1$2 是否作为数组中的索引存在,然后第二个条件是将 file1 的第三个字段更改为$3=$3","a[$1$2]so now $0包含共同点($1$2) 更改了其中第三个字段的行。

也必须为四个文件编写类似的逻辑。

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

shell 脚本中的 AWK - 如何根据共享密钥(2 个公共字段)比较和合并两个文件? 的相关文章

  • shell中如何求数组的长度?

    shell中如何求数组的长度 例如 arr 1 2 3 4 5 我想得到它的长度 在本例中是 5 a 1 2 3 4 echo a 4
  • GnuTLS 错误 -110:TLS 连接未正确终止

    我发现我的一个 Windows 服务没有连接到 Unix 服务器上的 FTP 位置 我在我的 PC 上运行了可执行文件 因为开发人员没有记录任何错误 并且我在尝试从 FTPWebRequest 获取响应时遇到超时错误C 中的对象 尝试使用
  • adb shell:无法使用 ESCAPE 键

    I want to use vi when running adb shell Starting vi is easy However I found that the ESC key doesn t seem to get through
  • sh read 命令会吃掉输入中的反斜杠吗?

    也许最容易用一个例子来解释 echo echo while read in do echo in done 看来read命令将输入 中的反斜杠解释为转义符并删除它们 我需要逐行处理文件而不更改其内容 并且我不知道如何停止在这里智能读取 有任
  • 仅替换引号之间的空格

    我有日志文件中的一行 field 1234 text in quotes 1234 other text in quotes 我想替换引号之间的空格 这样我就可以使用空格作为分隔符来提取列 所以结果可能是这样的 field 1234 tex
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 在 bash 中,如何除以两个变量并输出四舍五入到小数点后 5 位的答案? [复制]

    这个问题在这里已经有答案了 我将两个变量作为输入 将它们相除后 我希望将输出四舍五入到小数点后 5 位 我已经尝试过这种方法 gt sum 12 n 7 output scale 5 sum n bc echo output 我的代码没有显
  • Bash 的源命令无法处理从互联网上卷曲的文件

    我正在尝试使用curl从互联网获取脚本文件 如下所示 source lt curl url echo done 我看到的是 完成 得到了回响before卷曲甚至开始下载文件 这是实际的命令和输出 bash 3 2 source lt cur
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 在 Unix 上,我应该对 errno 使用 system_category 还是 generic_category ?

    C 0x 有两个预定义的error category对象 generic category and system category 据我目前所知 system category 应用于操作系统返回的错误 并且generic category
  • 通过 shell 脚本查找“非”硬链接的文件

    给定一个目录 如何找到其中的所有文件 以及任何子目录 not硬链接文件 或者更具体地说 这不是具有多个引用的硬链接文件 基本上我想扫描一个文件夹并返回一个列表unique该目录中的文件 包括目录和符号链接 不是它们的目标 如果可能的话 最好
  • 无法从 bash 脚本使用 nvm

    我正在尝试编写一个 shell 脚本来自动设置我的开发环境 安装 python nvm node mongo 等 我正在使用 nvm 来安装 Node js 它告诉您关闭并重新打开终端以开始使用 nmv 命令 我尝试获取 bashrc 和
  • 如何将输出重定向到文件,如果文件不存在则不创建它?

    我需要将输出重定向到一个文件 gt 在 shell 中 但如果该文件尚不存在 则不应创建该文件 如何实现这一目标 我尝试创建文件的符号链接并重定向到符号链接 但不幸的是 如果文件尚不存在 无论如何都会创建文件 也许我需要重定向到一个单独的程
  • UNIX时间记录时区吗?

    我想问一下UNIX时间 UNIX时间是否记录时区 我将托管从美国芝加哥移至 JST 问题是我的整个 MySQL 数据库都有 UNIX 时间 芝加哥 美国时区 的记录 我有一个 PHP 代码来显示之前的时间 例如 3 天前 昨天等 当我搬到新
  • 将 apache documentRoot 设置为符号链接(以便于部署)

    我们正在寻找一种将 Apache DocumentRoot 指向符号链接的方法 例如 文档根目录 var www html finalbuild Finalbuild 应该指向 home user build3 之类的文件夹 当我们将新构建
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • grep 查找 Unix 中的特殊字符

    我有一个日志文件 application log 其中可能包含以下多行普通和特殊字符字符串 Q 我想搜索包含这个特殊字符串的行号 grep Q application log 上述命令不返回任何结果 获取行号的正确语法是什么 Tell gr
  • Unix shell脚本找出脚本文件所在的目录?

    基本上我需要使用与 shell 脚本文件位置相关的路径运行脚本 如何将当前目录更改为与脚本文件所在的目录相同 在 Bash 中 你应该得到你需要的东西 如下所示 usr bin env bash BASEDIR dirname 0 echo
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分

随机推荐

  • 如何使用for循环减少编译时间

    我有下面的 R 代码 客观的 我正在尝试检查中存在的字符串kind对象是由以下内容组成的word通过迭代和比较两个对象的角色定位来识别对象 如果它是另一个的复合 则返回正值 否则返回负值 问题陈述 如果 kind 对象值在每个字符串中包含最
  • 如果当前阶段有任何作业,如何动态引用 Azure Pipelines 中的先前作业

    我正在尝试设置一个 azure yaml 管道 该管道使用两个部署模板来执行两个相应的作业 测试和部署 每个阶段的作业应按顺序运行 因为测试作业会创建部署作业使用的工件 这很好用 但是 对于一种环境 我将部署分为两个阶段 一个阶段仅运行测试
  • iOS中通过处理cookie来维护Session信息

    我是 iOS 开发新手 我正在使用 NSURLSession 来管理会话信息 下面是我用来调用任何服务器 API 的示例代码 NSURLSessionDataTask task NSURLSession sharedSession data
  • 如何将 DataGridViewComboBoxColumn 绑定到返回列表的对象的属性/方法?

    我有一个具有多个属性的自定义对象 其中一个属性返回一个列表 这是该对象的代码 public class SearchResult private int eventId private String eventTitle private i
  • 在子域上安装 GitLab

    我正在尝试在子域上安装 GitLab 我对网络服务器之类的东西不是很熟悉 知识很少 我目前通过以下方式连接到子域ssh email protected cdn cgi l email protection在 Mac 的终端上 然后我ls到子
  • 如何中断 Hover 的 handlerOut

    我有以下情况 我有一个对象 我们称之为 按钮 当您将鼠标悬停在 按钮 上时 它会使另一个对象 信息 向下滑动 当然 当你的鼠标离开Button时 Info就会向上滑动并消失 但是 Info 有一个链接 用户可能想要单击它 我可以延迟信息向上
  • 2 个向量的样本协方差

    我正在尝试计算这两个向量之间的样本协方差 我定义了一个带有两个输入变量的函数 不知道是否正确 我的样本协方差公式也无法运行 谁能帮我用R写出来 xv c 1 5 5 7 8 4 2 2 7 5 4 8 9 yv c 0 1 1 5 0 8
  • Android 2.0:支持Actionbar库(appcompat v7支持库无资源):找不到资源@style/Theme.AppCompat.Light.DarkActionBar

    我跟着http developer android com guide topics ui actionbar html http developer android com guide topics ui actionbar html在
  • Python OrderedDict 与 dict() 比较

    这件事让我完全困惑不解 asset hist for key host val hist list in am output asset history items for index hist item in enumerate val
  • Gist (gist.el / Emacs) -- 在创建时设置“描述”

    默认行为gist region就是离开描述空白的 要设置描述 需要切换到gist list缓冲然后使用该函数gist edit current description设置描述 我希望能够设置描述在创建要点的同时 无需切换到gist list
  • php-ffmpeg 获取视频时长

    当我尝试使用 php ffmpeg 包装器和 ffprobe 获取视频的持续时间时 我得到一个巨大的对象 而不仅仅是持续时间 ffprobe FFMpeg FFProbe create ffprobe gt format this gt v
  • WebClient 下载文件已损坏

    我正在尝试使用 C WebClient 下载文件 这是网址 http www czce com cn cn DFSStaticFiles Future 2018 20180821 FutureDataClearParams txt http
  • 如何使用 CSS 网格布局在 CSS 中制作固定列?

    我制作了一个简单的网站 containerdiv 是两个 div 的父级 left and right 通过使用网格布局 https developer mozilla org en US docs Web CSS CSS Grid Lay
  • 为什么需要目标网络?

    我想了解为什么 DQN 中需要目标网络 我正在阅读有关 通过深度强化学习实现人类水平控制 的论文 我了解 Q learning Q learning 是一种基于价值的强化学习算法 它学习状态 动作之间的 最佳 概率分布 从而在一系列时间步长
  • 带有按钮和输入的弹出框 HTML 内容未呈现[重复]

    这个问题在这里已经有答案了 我正在尝试向弹出窗口添加按钮 但它似乎没有呈现 是像我那样做的还是有更好的方法 myinput popover trigger focus container body placement bottom html
  • 将数据库引用传递到路由中不适用于我的 Node / Express 项目

    我正在使用 Node Express 创建一个简单的 REST API 并尝试将路由逻辑与数据库逻辑分开 我在从路线访问数据库时遇到问题 这是我的 server js 代码 var express require express path
  • AngularJS 中的 ExpressJS 变量 - Mean Stack

    我正在构建一个 MEAN 应用程序 我遇到的一个问题是我想让我的用户对所使用的路由进行某种控制 所以我希望我的服务器端代码 expressJS 在我的客户端代码中设置一些变量 本质上 我希望能够从服务器端代码生成客户端 JS 例如 在 PH
  • 附件损坏签名第 2 部分

    我创建了将图像添加到现有 pdf 文档然后对其进行签名的代码 所有这些都使用 PDFBox 请参阅下面的代码 该代码很好地添加了图像和签名 但是 在某些文档中 Acrobat Reader 抱怨 签名字节范围无效 该问题似乎与中描述的问题相
  • 如何与多个翻译单元共享一个静态变量?

    我想将数组设为静态 并且还想在其他翻译单元中引用它 然后我将其定义为static int array 100 并在其他翻译单元中将其声明为extern int array 但是编译器告诉我 static 和 extern 的存储类相互冲突
  • shell 脚本中的 AWK - 如何根据共享密钥(2 个公共字段)比较和合并两个文件?

    有人可以帮忙比较两个文件吗 我已经使用了下面的命令 但我无法成功 awk F NR FNR a 1 2 下一个 1 2 in a temp1 dat temp2 dat 这是我的需要 需要比较以下两个 dat 文件中的前两个字段 并将结果按