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