Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Csv 带有自定义行分隔符的Unix差异_Csv_Unix_Diff - Fatal编程技术网

Csv 带有自定义行分隔符的Unix差异

Csv 带有自定义行分隔符的Unix差异,csv,unix,diff,Csv,Unix,Diff,希望比较两个CSV文件。假设字段分隔符为$,每条记录有两个字段,文件的格式如下: a$simple line$ b$run-on- line$ c$simple line$ 是否有一些开关或各种Unix diff命令可以让我运行比较,其中记录分隔符(行分隔符)是紧跟新行的$符号 理想情况下,我希望确保在检测到任何更改时,diff输出整个记录 使用默认行为,我可能会将部分记录作为diff输出(在记录跨多行运行的场景中) 有没有我没有考虑过的更聪明的方法 -- 编辑以添加:预期输出的示例 如果我将

希望比较两个CSV文件。假设字段分隔符为$,每条记录有两个字段,文件的格式如下:

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脚本,用于比较/区分两个(逗号)分隔的文件。与标准差异不同的是,您将获得差异所在的记录编号以及不同的字段/列。分隔符可以设置为您想要的值,而不仅仅是逗号。此外,您还可以提供第三个文件,其中包含由分隔符分隔的一行(!)中的列名


您能提供预期输出的示例吗?编辑以添加预期输出的示例吗?您能提供预期输出的示例吗?编辑以添加预期输出的示例