差异:如何仅比较每行的前 n 个字符?

差异:如何仅比较每行的前 n 个字符?

我有两个日志文件,它们是由解码后的二进制数据生成的。解码器略有不同,我试图找出输出中的差异。为此,我对这两个日志文件进行了差异分析,除了每行的时间戳不同外,这种方法效果很好。出于某些原因,时间戳的差异无关紧要,所以我想让 diff 忽略它们。

由于日志文件遵循特定的格式,我可以简单地从每行中排除最后约 40 个字符以忽略时间戳。例如:

A 线:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.113s | file.cpp              :738

B 行:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.163s | file.cpp              :738

在我看来,这些行应该被视为相同的。

我如何告诉 diff 仅包含每行的前 n 个字符,或者排除每行的最后 m 个字符?

答案1

在 bash 中,您可以使用进程替换。

要删除最后 40 个字符,你可以使用

diff <(sed 's/.\{40\}$//' file1) \
     <(sed 's/.\{40\}$//' file2)

要选择前 40 个字符,您可以使用

cut -c1-40 file

相关内容