Csv 带有自定义行分隔符的Unix差异
希望比较两个CSV文件。假设字段分隔符为$,每条记录有两个字段,文件的格式如下:Csv 带有自定义行分隔符的Unix差异,csv,unix,diff,Csv,Unix,Diff,希望比较两个CSV文件。假设字段分隔符为$,每条记录有两个字段,文件的格式如下: a$simple line$ b$run-on- line$ c$simple line$ 是否有一些开关或各种Unix diff命令可以让我运行比较,其中记录分隔符(行分隔符)是紧跟新行的$符号 理想情况下,我希望确保在检测到任何更改时,diff输出整个记录 使用默认行为,我可能会将部分记录作为diff输出(在记录跨多行运行的场景中) 有没有我没有考虑过的更聪明的方法 -- 编辑以添加:预期输出的示例 如果我将
a$simple line$
b$run-on-
line$
c$simple line$
是否有一些开关或各种Unix diff命令可以让我运行比较,其中记录分隔符(行分隔符)是紧跟新行的$符号
理想情况下,我希望确保在检测到任何更改时,diff输出整个记录
使用默认行为,我可能会将部分记录作为diff输出(在记录跨多行运行的场景中)
有没有我没有考虑过的更聪明的方法
--
编辑以添加:预期输出的示例
如果我将上面的CSV文件与以下文件进行比较:
a$simple line$
b$run-on-changed-
line$
c$simple line$
。。。我希望看到整个记录b作为差异报告。差不多
2c2
< b$run-on-\nline$
---
> b$run-on-changed-\nline$
2c2
b$在更改后运行-\n行$
Peter,gnu diff:(gnu diffutils)中没有对自定义行分隔符的直接支持
您可以尝试使用sed
两次:sed将您的格式转换为每行一条记录以进行差异化;差异转换文件;返回到多行记录格式
第一个sed将所有$\n
转换为real\n
;和\n
之前不带$
的特殊序列,如\\\\\\\\\\$%\\\\\\\\\\\\\\\\\\\\\\\\\
然后做差异
第二个sed将把
\\\\\\\$%\\\\\\\\\\\\\\\\\/code>转换回\n
(或者转换成\\n
,以便于查看差异输出)彼得,gnu diff:(gnu diffutils)中没有对自定义行分隔符的直接支持
您可以尝试使用sed
两次:sed将您的格式转换为每行一条记录以进行差异化;差异转换文件;返回到多行记录格式
第一个sed将所有$\n
转换为real\n
;和\n
之前不带$
的特殊序列,如\\\\\\\\\\$%\\\\\\\\\\\\\\\\\\\\\\\\\
然后做差异
第二个sed将把\\\\\$%\\$%\\\\\\\\\\\
转换回\n
(或转换成\\n
以便于查看差异输出)有支持使用csv的差异变体。其中一些可能会在字段内处理带有换行符的csv:
(python)
csvdiff允许您比较两个CSV文件的语义内容,忽略行和列排序等内容,以了解实际更改的内容。如果你比较一个自动系统的输出从一天到下一天,这是很有用的,这样你就可以看看到底发生了什么变化
(红宝石)
与逐行比较且对记录顺序敏感的标准差异不同,CSV差异通过关键字段识别公共行,然后比较每行中字段的内容
(perl)
csvdiff是一个perl脚本,用于比较/区分两个(逗号)分隔的文件。与标准差异不同的是,您将获得差异所在的记录编号以及不同的字段/列。分隔符可以设置为您想要的值,而不仅仅是逗号。此外,您还可以提供第三个文件,其中包含由分隔符分隔的一行(!)中的列名
有一些不同的变体支持使用csv。其中一些可能会在字段内处理带有换行符的csv:
(python)
csvdiff允许您比较两个CSV文件的语义内容,忽略行和列排序等内容,以了解实际更改的内容。如果你比较一个自动系统的输出从一天到下一天,这是很有用的,这样你就可以看看到底发生了什么变化
(红宝石)
与逐行比较且对记录顺序敏感的标准差异不同,CSV差异通过关键字段识别公共行,然后比较每行中字段的内容
(perl)
csvdiff是一个perl脚本,用于比较/区分两个(逗号)分隔的文件。与标准差异不同的是,您将获得差异所在的记录编号以及不同的字段/列。分隔符可以设置为您想要的值,而不仅仅是逗号。此外,您还可以提供第三个文件,其中包含由分隔符分隔的一行(!)中的列名
您能提供预期输出的示例吗?编辑以添加预期输出的示例吗?您能提供预期输出的示例吗?编辑以添加预期输出的示例