使用 awk 或 sed 基于公共列合并两个 csv 文件 [重复]

2023-12-03

我有一个两个 CSV 文件,两个文件中有一个公共列,并且一个文件中有重复项。如何使用 awk 或 sed 合并两个 csv 文件?

CSV 文件 1

5/1/20,user,mark,Type1 445566
5/2/20,user,ally,Type1 445577
5/1/20,user,joe,Type1 445588
5/2/20,user,chris,Type1 445566

CSV 文件 2

Type1 445566,Name XYZ11
Type1 445577,Name AAA22
Type1 445588,Name BBB33
Type1 445566,Name XYZ11

我想要的是?

5/1/20,user,mark,Type1 445566,Name XYZ11
5/2/20,user,ally,Type1 445577,Name AAA22
5/1/20,user,joe,Type1 445588,Name BBB33
5/2/20,user,chris,Type1 445566,Name XYZ11

那么Linux/Unix中有没有bash命令可以实现这一点呢?我们可以使用 awk 或 sed 来完成此操作吗?

基本上,我需要将 CSV 文件 1 的第 4 列与 CSV 文件 2 的第 1 列进行匹配,并合并两个 csv。

尝试了以下命令:

Command:

粘贴 -d,

得到结果:

20 年 5 月 1 日,用户,类型 1,类型 1 445566,名称 XYZ11


如果您能够安装join实用程序,此命令有效:

join -t, -o 1.1 1.2 1.3 2.1 2.2 -1 4 -2 1 file1.csv file2.csv

解释:

-t,将字段分隔符标识为逗号 (',')

-o 1.1 1.2 1.3 2.1 2.2将输出格式化为“file1col1, file1col2, file1col3, file2col1, file2col2`

-1 4按 file1 中的第 4 列连接

-2 1按 file2 中的第 1 列连接

有关更多使用信息join, 参考加入联机帮助页.

Edit:您特别要求使用解决方案awk or sed所以这是awk执行:

awk -F"," 'NR==FNR {a[$1] = $2; next} {print $1","$2","$3","$4"," a[$4]}' \
    file2.csv \
    file1.csv

解释:

-F","用逗号字符分隔

NR==FNR读取第一个文件参数(请注意,在上面的解决方案中,我们首先传递 file2)

{a[$1] = $2; next}在当前文件中,将Column2的内容保存在以Column1为键的数组中

{print $1","$2","$3","$4"," a[$4]}读取 file1 并使用 Column4,将值与数组中键的值进行匹配。打印 Column1、Column2、Column3、Column4 和键的值。

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

使用 awk 或 sed 基于公共列合并两个 csv 文件 [重复] 的相关文章

  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 当找到匹配时使用 sed 替换行首

    我有一个 Java 文件 我想注释包含匹配的任何代码行 myvar 我认为 sed 应该在这里帮助我 sed s myVar not sure what to put here g MyFile java 我不知道要输入什么 not sur
  • 带有变量 bash 的降序循环

    cat fromhere sh bin bash FROMHERE 10 for i in seq FROMHERE 1 do echo i done sh fromhere sh 为什么不起作用 我找不到任何在谷歌中搜索降序循环的示例 甚
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 在 C++ linux 中将 STRINGS 写入串口

    我知道这个问题遍布互联网 但仍然没有任何东西能让我完全解决这个问题 我想用 C linux 将数据写入 Propeller 板的串行端口 从控制台获取输入时程序运行良好 但是当我向它写入字符串时总是返回 ERROR Invalid comm
  • 安装 R 包。包含目录为空。开发标头

    我目前正在尝试运行一些最初在 2 11 0 下运行的 R 代码 我使用的 R 版本 2 14 1 无法运行该代码 我不熟悉 R 及其向后兼容性 据我所知 我的问题可能与版本无关 我会很高兴得知这是我做错的事情 其余的代码是无关紧要的 即使我
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • 用等号完成命令选项

    我正在尝试为可能需要表单上的长选项的命令编写一个 Bash 完成脚本 option or param value 如果用户已经在命令行上输入了一个选项 则该选项应从完成列表中排除 假设仅在命令行上指定一次给定选项才有意义 这是第一次尝试 m
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • Python 脚本作为 Linux 服务/守护进程

    Hallo 我试图让 python 脚本作为服务 守护进程 在 ubuntu linux 上运行 网络上存在多种解决方案 例如 http pypi python org pypi python daemon http pypi python
  • 如何在不同目录中启动多个窗口的 tmux?

    我想使用脚本打开一个有 6 个窗口的 tmux 会话 每个窗口位于不同的目录中 我开始于我找到的一个脚本 http blog hawkhost com 2010 07 02 tmux E2 80 93 the terminal multip
  • 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

    我正在尝试执行systemd计时器并希望将执行脚本的输出保存在每个日期的文件中 这是我的ExecStart脚本中的 service file ExecStart bin bash c echo date Y m d gt gt home u
  • 如何使用 sed 将空格替换为 \(space)?

    当我使用 sed 将所有空格替换为 X 时 该命令有效 命令为 sed s X g filelist tmp 但是 当我尝试用 space 替换所有出现的空格时 代码是 sed s g filelist tmp 这不起作用 我究竟做错了什么
  • 如何在 GNU/Linux 上设置 Subversion (SVN) 服务器 - Ubuntu [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一台运行 Ubuntu 的笔记本电脑 我想将其用作 Subversion 服务器 既让我自己在本地承诺 也让其他人远程承诺 要使其
  • 让 TeXstudio 在 linux mint 中工作:找不到文件“url.sty”。

    刚刚切换到 Linux Mint 以前的顽固 Windows 用户 我在尝试安装 TeXstudio 时遇到一些问题 Sudo apt get install texstudio 给了我一个正确的安装 至少 我是这么认为的 但是当我尝试构建
  • 每当 SQLERROR 永远不起作用时

    我不知道可能是什么原因 我已经在网上花了几个小时试图找出我的情况出了什么问题 我查过官方文档 https docs oracle com cd B19306 01 server 102 b14357 ch12052 htm还有一些汤姆 凯特

随机推荐

  • 绑定到 ItemsControl 中的 CurrentItem

    下面的 XAML 基本上是试图列出以下内容Buttons 由Name中对象的属性Views当前集合DataContext 当我点击一个按钮时CurrentItem的财产CollectionViewSource应该改变和相关的View应显示在
  • Spring Boot 过滤器调用了两次或根本没有调用

    我实现了一个自定义过滤器 它将请求的 cookie 中的一些内容添加到其标头中 Component Slf4j public class MyCustomFilter implements Filter Override public vo
  • 如何使用 livedata 从服务更新 UI?

    我正在创建播放器应用程序 我想为我的媒体播放器使用前台服务 我需要使用服务中的实时数据更新 UI 我已经阅读过有关使用广播接收器的信息 但我想使用 livedata 假设您使用具有实时数据的服务 如下所示 class MusicServic
  • 组合时间序列对象和列表:包“termstrc”

    R 包 termstrc 专为术语结构估计而设计 是一个非常有用的工具 但它需要以一种特别尴尬的格式设置数据 列表中的列表 Question 为了创建运行函数 dyncouponbonds 所需的重复子列表格式 在 R 外部或内部准备和调整
  • 更新 pygame 中的文本

    我在这里做错了什么 我想更新标签的文本以适应玩家得分 我查看了其他示例并添加了更新方法 但文本仍然保持不变 class Label def init self txt location size 160 30 bg WHITE fg BLA
  • youtube 嵌入视频 pregreplace 与开始计时

    在我们的论坛上 我们目前用嵌入对象替换了所有 YouTube 链接 感谢以下答案 如何使用正则表达式查找字符串中的所有 YouTube 视频 ID 问题是 我们的许多用户希望直接发布指向视频中特定时间的链接 例如 注意 t 1m15s 根据
  • SQL Bigquery:将特定组的选择限制为 10

    下面是示例表 目前 该表对于每个 ID 都有无限的条目 我的要求是 首先按 rand 升序对 ID 进行排序 然后只取前 2 行 ID 和 companies CREATE TABLE table name ID int companies
  • 将 Jetty 绑定到 IPv6 地址

    我正在尝试将 Jetty 绑定为仅侦听 IPv6 地址 我正在使用 Jetty 7 4 2 v20110526 我的jetty xml
  • 在图像上绘制对角线

    您好 我正在尝试在图像的右上角到左下角之间绘制对角线 这是到目前为止我的代码 width getWidth picture height getHeight picture for x in range 0 width for y in r
  • 根据月份日期向数据表添加季节列

    我正在使用 data table 我正在尝试创建一个名为 season 的新列 它基于名为 MonthName 的列创建一个具有相应季节的列 例如夏季 冬季 我想知道是否有更有效的方法来根据月份值将季节列添加到数据表中 这是 300 000
  • 默认情况下是否启用可选依赖项?

    如果我定义一个依赖项 例如foo version 1 0 0 optional true 当我执行 cargo run 时它会可用吗 我可以检查它是否在代码中启用吗 if cfg feature foo 似乎不起作用 就像该功能一直缺失一样
  • matplotlib 条形图中的极限误差线

    我试图让误差条显示在置信区间的限制处 而不是显示在中心 我想要的是这样的 但我得到的是这样的 为了绘制条形图 我使用了这个 import pandas as pd import numpy as np import matplotlib p
  • 验证视图状态 MAC 失败错误

    尝试通过传递参数来运行报表查看器 但收到错误 验证视图状态 MAC 失败错误 ASP NET MVC 已尝试以下但没有运气 添加了机器密钥 http aspnetresources com tools machineKey 到 web co
  • Hyperledger Fabric 加密材料

    如果我们看到加密配置文件夹中基础网络 of 布料样品 我们有各种类型的各种证书材料 example com ca 0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec30071
  • 由于名称中存在撇号而导致无效的 XPath 表达式异常

    我收到以下代码的无效 Xpath 异常 current Name current Name replace System out println current Name String xp1 page name current Name
  • 在 web.config 文件中设置重定向

    我正在尝试使用更具描述性的 URL 来重定向一些不友好的 URL 这些 URL 结尾为 aspx cid 3916每个类别名称页面的最后一位数字都不同 我希望它重定向到Category CategoryName 3916 我在web con
  • Android:如何创建“持续”通知?

    您好 我如何创建像第一个电池指示器一样的永久通知 如果您正在使用NotificationCompat Builder 您可以使用 NotificationCompat Builder mBuilder new NotificationCom
  • 从本地 html/javascript 网站发布到在线 PHP 文件

    我正在尝试做什么 从本地 html javascript 网站发布到在线 PHP 文件 Problem 当我尝试使用下面的代码时 我不断收到下面提到的错误 背景 该网站旨在本地运行 由于每个用户都可以选择使用哪个浏览器 因此我希望找到一种可
  • 将自定义计算添加到 magento 中的购物车总计和总计

    我正在网站上工作 我想在购物车总额和总计中添加 减去费用 我正在触发此事件以捕获购物车详细信息 sales order save after 在观察者中我使用此代码获得了价格 public function modifyPrice Vari
  • 使用 awk 或 sed 基于公共列合并两个 csv 文件 [重复]

    这个问题在这里已经有答案了 我有一个两个 CSV 文件 两个文件中有一个公共列 并且一个文件中有重复项 如何使用 awk 或 sed 合并两个 csv 文件 CSV 文件 1 5 1 20 user mark Type1 445566 5