有什么简单的方法可以比较n
两个文件的前 20 行(或多行)?
我已经设置了一个自动的pg_dump
,但事实证明正在创建的转储已损坏,现在无法恢复。
我仍然有一个一年前的良好转储文件,并且我想比较两个文件之间的前 20 行。
有什么简单的方法可以做到这一点?
我使用的是 Manjaro Linux。
答案1
使用带有进程替换 ( ) 的 shell <(...)
,例如bash
或zsh
:
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 行。
您可能想在上面的命令中使用-c
or-u
或其他一些选项来获取您选择的 diff 格式(请参阅手册)。diff
diff
如果文件被压缩,那么您将必须解压缩数据:
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