Linux 如何在Unix中比较两个zip格式(.tar、.gz、.Z)文件
我有两个gz文件。我想比较那些文件而不提取。例如: 第一个文件是number.txt.gz-在该文件中:Linux 如何在Unix中比较两个zip格式(.tar、.gz、.Z)文件,linux,unix,gzip,Linux,Unix,Gzip,我有两个gz文件。我想比较那些文件而不提取。例如: 第一个文件是number.txt.gz-在该文件中: 1111,589,3698, 2222,598,4589, 3333,478,2695, 4444,258,3694, 第二个文件-xxx.txt.gz: 1111,589,3698, 2222,598,4589, 我想比较这些文件之间的任何列。如果第一个文件中的第1列等于第二个文件的第1列,则表示我希望输出如下: 1111,589,3698, 2222,598,4589,
1111,589,3698,
2222,598,4589,
3333,478,2695,
4444,258,3694,
第二个文件-xxx.txt.gz:
1111,589,3698,
2222,598,4589,
我想比较这些文件之间的任何列。如果第一个文件中的第1列等于第二个文件的第1列,则表示我希望输出如下:
1111,589,3698,
2222,598,4589,
你不能这样做。
您可以通过比较存档而不是压缩文件中的部分数据来比较存档中的所有内容
您也可以在不解包的情况下比较存档中选定的文件,因为存档中的元数据具有CRC32控制总和,您必须比较此总和才能知道这一点而不解包。您不能这样做。
您可以通过比较存档而不是压缩文件中的部分数据来比较存档中的所有内容
您也可以在不解包的情况下比较存档中选定的文件,因为存档中的元数据具有CRC32控制总和,您必须在不解包的情况下比较此总和才能知道这一点。在使用不同技术保持压缩的情况下,您无法比较文件 您必须首先解压缩文件,然后找出结果之间的差异 解压可以通过gunzip、tar和解压缩(或zcat)完成
可以使用diff命令查找差异。当文件使用不同的技术进行压缩时,无法对其进行比较 您必须首先解压缩文件,然后找出结果之间的差异 解压可以通过gunzip、tar和解压缩(或zcat)完成
可以使用diff命令查找差异。如果在将数据写入那些大文件后需要检查和比较数据,并且由于时间和空间限制而无法执行此操作,则使用了错误的存储格式。如果您的数据存储格式不支持您的流程,则需要更改 我的建议是将数据放入数据库,而不是将其写入压缩文件。使用合理的键,可以通过简单的查询来比较该数据的子集,删除不再需要的数据也变得同样简单 事务性和严格的SQL遵从性可能不是这里的重点,所以我选择MySQL(使用MyISAM驱动程序)作为一个简单、快速的数据库
编辑:或者,Blorgbeard的建议是完全合理和可行的。在任何可以访问(反)压缩库的编程语言中,您都可以按顺序读取压缩文件,而无需将扩展文本写入磁盘;如果对两个输入文件并排执行此操作,则可以实现比较,而不会出现任何空间问题
至于时间问题,您会发现读取和解压缩文件(但不将其写入磁盘)要比写入磁盘快得多。我最近编写了一个类似的程序,该程序将.zip文件作为输入,并创建一个.zip文件作为输出,而从未将未压缩的数据写入该文件;而且它的运行速度比以前的版本快得多,以前的版本可以解包、处理和重新打包数据。如果在数据写入那些大文件后需要检查和比较数据,并且时间和空间限制阻止了您这样做,那么您使用的存储格式是错误的。如果您的数据存储格式不支持您的流程,则需要更改 我的建议是将数据放入数据库,而不是将其写入压缩文件。使用合理的键,可以通过简单的查询来比较该数据的子集,删除不再需要的数据也变得同样简单 事务性和严格的SQL遵从性可能不是这里的重点,所以我选择MySQL(使用MyISAM驱动程序)作为一个简单、快速的数据库
编辑:或者,Blorgbeard的建议是完全合理和可行的。在任何可以访问(反)压缩库的编程语言中,您都可以按顺序读取压缩文件,而无需将扩展文本写入磁盘;如果对两个输入文件并排执行此操作,则可以实现比较,而不会出现任何空间问题
至于时间问题,您会发现读取和解压缩文件(但不将其写入磁盘)要比写入磁盘快得多。我最近编写了一个类似的程序,该程序将.zip文件作为输入,并创建一个.zip文件作为输出,而从未将未压缩的数据写入该文件;而且它的运行速度比早期版本的数据解包、处理和重新打包速度要快得多。我不能100%确定它是指匹配列/字段还是整行,但对于行,沿着以下几行应该可以工作:
comm -12 <(zcat number.txt.gz) <(zcat xxx.txt.gz)
comm-12我不能100%确定这是指匹配列/字段还是整行,但对于行,应该按照以下几行进行操作:
comm -12 <(zcat number.txt.gz) <(zcat xxx.txt.gz)
comm-12我想要的确切答案只是这个
nawk -F"," 'NR==FNR {a[$1];next} ($3 in a)' <(gzcat file1.txt.gz) <(gzcat file2.txt.gz)
nawk-F”,“'NR==FNR{a[$1];next}($a中的3)”我想要的确切答案只是这个
nawk -F"," 'NR==FNR {a[$1];next} ($3 in a)' <(gzcat file1.txt.gz) <(gzcat file2.txt.gz)
什么编程语言?Bash脚本?我想你指的是行,不是列。还有,为什么不能解压缩文件?可能有更好的方法来实现这一点。什么编程语言?Bash脚本?我想你指的是行,不是列。还有,为什么不能解压缩文件?也许有更好的方法可以做到这一点。gzip是一个流压缩机,对吗?所以理论上他可以并行解压两个文件(仅在内存中),并逐行比较。从技术上讲,它仍将进行解压缩,但不会创建解压缩文件。。我想他不想解压的原因是因为文件大小。但我有超过2GB的文件。如果我比较一下那些大文件,会花更多的时间