【问题标题】:Not able to compare two files with comm / diff无法使用 comm / diff 比较两个文件
【发布时间】:2021-03-19 07:38:19
【问题描述】:

潜伏已久,第一次发帖。

几天来,我试图比较两个排序的文件,但没有成功。 我试过 commdiff,甚至是 grep -v -f 。 即使我将它们合并在一起并使用 uniq -c ,它也会将每个出现都显示为 1 ,因此它显然不认为这些行是相同的。 comm 还显示所有 4000 行对于两个文件都是唯一的。但对于人眼来说,它们是相同的。 file -i 表明它们具有相同的编码。我通过VI检查了隐藏字符,它们完全相同。

[root@server tmp]# file -i master.tmp
master.tmp: text/plain; charset=us-ascii
[root@server tmp]# file -i mediaa.tmp
mediaa.tmp: text/plain; charset=us-ascii

我无法分享确切的线条,但它们看起来类似于:

XXXXX%20(35e4df6a-48dd-43f-921-03942bd4)_1614884940

文件之间的唯一区别是它们的创建方式。 一种是应用命令的直接输出。另一个是从不同应用程序的输出中组合起来的,必须使用 AWK 进行操作以实现相同的结构。 另一个线索是,一旦我将文本复制到我的记事本++,然后将其复制回终端,它就会开始正常工作。但这是不需要的,整个比较将成为更大脚本的一部分,我需要它是自动的。是否有任何命令可以用来清除文件结构中的任何差异?我找到了 iconv 但我不确定我应该尝试哪种其他编码。 任何想法我在这里缺少什么? 谢谢

【问题讨论】:

    标签: bash character-encoding comm


    【解决方案1】:

    好的,找到原因了。 sed -n l 显示另一个文件的不同类型的回车。奇怪的是 VI :set list 没有显示出差异。

    【讨论】:

      【解决方案2】:

      奇怪的是 VI :set list 没有显示差异。

      如果您在加载 CR+NL 文件后立即查看状态行,您会注意到 vi 的不同之处,文件名旁边会显示 [dos]

      如果您只想比较文件,可以使用grep-Z(忽略行尾空格)选项。

      如果要从 DOS 文件中删除 CR,可以使用tr -d \\r <withCR >withoutCR

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        • 2017-01-31
        • 2012-04-11
        • 1970-01-01
        相关资源
        最近更新 更多