首页 > 解决方案 > 比较两个 csv 文件并在单独的 csv 上写入丢失的数据

问题描述

请在 awk 场景中帮助我

我有两个 csv,我需要比较两个 csv 文件,并且必须在单独的 csv 文件中写入缺失的列值以及表名

文件.csv

Table Name  Column Name
Class5  Tamil
Class5  English
Class5  Maths
Class5  Physics
Class5  Chemistry
Class6  Tamil
Class6  English
Class6  Maths
Class6  Chemistry
Class7  Tamil
Class7  English
Class7  Maths
Class7  Physics
Class7  Chemistry

File2.csv 

Table Name  Column Name
Class5  Tamil
Class5  English
Class5  Maths
Class5  Physics
Class5  Chemistry
Class6  Tamil
Class6  English
Class6  Maths
Class6  Physics
Class6  Chemistry

期望输出:

Missing Table(On file1)     Missing column(on file1)    Missing table(on file2)   Missing column(on file2)
-------------------------------------------------------------------------------------------------------------------
class6                                Physics                   
                                                          class7                   Tamil
                                                          class7                   English
                                                          class7                   Maths
                                                          class7                   Physics
                                                          class7                   Chemistry

标签: linuxshellcsvawk

解决方案


您可以使用 Unix通信命令。

在将文件传递给comm命令之前,您需要先对它们进行排序。

要获取 File1.csv 中缺少的行,您必须执行以下操作,

comm -23 <(sort File2.csv | uniq) <(sort File1.csv | uniq)

要获取 File2.csv 中缺少的行,您必须执行以下操作,

comm -23 <(sort File1.csv | uniq) <(sort File2.csv | uniq)

推荐阅读