比较两个文件的前 20 行

J86*_*J86 2 file-comparison manjaro

我可以比较n两个文件的前 20 行(或多行)的简单方法是什么?

我已经设置了一个自动的pg_dump,但事实证明正在创建的转储已损坏,现在无法恢复。

我还有一个一年前的好转储文件,我想比较两个文件之间的前 20 行。

有什么简单的方法可以做到这一点?

我在 Manjaro Linux 上。

Kus*_*nda 7

使用带有进程替换 ( <(...))的 shell ,例如bashzsh

diff <( head -n 20 file1 ) <( head -n 20 file2 )
Run Code Online (Sandbox Code Playgroud)

head -n 20在每个文件上运行以获取每个文件的前 20 行,在两个单独的进程替换中。每个进程替换都将扩展为一个文件的路径名,其中的命令的输出可以从中读取(这些文件是临时的,以后会被删除)。

diff然后调用该实用程序来比较这两组数据。

没有进程替换:

diff <( head -n 20 file1 ) <( head -n 20 file2 )
Run Code Online (Sandbox Code Playgroud)

这会从一个文件的前 20 行创建一个单独的文件,并使用它,diff而其他文件的前 20 行是从标准输入读取的。

您可能希望在上面的命令中使用-c-u或其他一些选项diff来获取您选择的差异格式(请参阅diff手册)。


如果文件被压缩,那么您必须解压缩数据:

head -n 20 file1 >file1.short
head -n 20 file2 | diff file1.short -
rm -f file1.short
Run Code Online (Sandbox Code Playgroud)

或者,没有进程替换:

gzip -d -c <file1 | head -n 20 >file1.short
gzip -d -c <file2 | head -n 20 | diff file1.short -
rm -f file1.short
Run Code Online (Sandbox Code Playgroud)

  • @J86 是的,我的答案的最后一部分只有在使用 `gzip` 压缩来压缩文件时才有效。如果你不能让它与我的代码一起工作,那么你必须更加明确地说明你的文件是什么,它们是什么格式,它们是如何创建的,等等,因为没有人能够处理他们看不到的完全未知的文件。 (3认同)