比较两个文件的前 20 行

比较两个文件的前 20 行

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

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

我仍然有一个一年前的良好转储文件,并且我想比较两个文件之间的前 20 行。

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

我使用的是 Manjaro Linux。

答案1

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

diff <( head -n 20 file1 ) <( head -n 20 file2 )

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

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

没有进程替换:

head -n 20 file1 >file1.short
head -n 20 file2 | diff file1.short -
rm -f file1.short

这会根据一个文件的前 20 行创建一个单独的文件,并使用该文件,同时diff从标准输入读取其他文件的前 20 行。

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


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

diff <( gzip -d -c <file1 | head -n 20 ) <( gzip -d -c <file2 | head -n 20 )

或者,在没有流程替换的情况下:

gzip -d -c <file1 | head -n 20 >file1.short
gzip -d -c <file2 | head -n 20 | diff file1.short -
rm -f file1.short

相关内容