如何只比较两个文件的第一行?


17

我只想比较两个文件的第一行,而不是整个文件。我该怎么做?我只需要第一行的解决方案,但是如果您可以指定行数,那将是一个更好的答案。

因此,diff将不会在以下两个文件之间返回任何差异:

a
1
2

和:

a
3
4

对你有用吗?
nerdwaller 2012年

@nerdwaller是的,已接受。
gsingh2011 2012年

凉豆。试图考虑其他选择,所幸这是没有必要的。
nerdwaller 2012年

Answers:


26

干得好:

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

(这将什么都不会返回)。

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

Returns:
2c2
< 1
---
> 3

您可以将其合并到脚本中以完成您提到的事情。

#!/bin/bash

fileOne=${1}
fileTwo=${2}
numLines=${3:-"1"}

diff <(head -n ${numLines} ${fileOne}) <(head -n ${numLines} ${fileTwo})

要使用它,只需使脚本具有可执行文件,chmod +x nameofscript.sh然后执行即可./nameofscript.sh ~/file1 ~/Docs/file2。如果需要更多行号,则将默认行数保留为1,然后在该命令的末尾附加一个数字。

(或者,您可以使用-f1 file1 -f2 file2 -n 1在脚本中进行切换,但是我不记得上面的case语句了)。

head从开头返回行号,由表示-n。如果您想做反向操作,那就是tail -n ${numLines}(从头到尾做尾数)。

编辑5/10/16:

这特定于Bash(和兼容的Shell)。如果您需要从其他地方使用它:

bash -c 'diff <(...) <(...)'

当我需要对两个目录进行比较时,对递归比较会如何工作?
lanoxx

@lanoxx diff -r dir1 dir2用于目录,要限制它,您可能希望将其通过管道传递给其他对象。如果您有具体问题,请打开一个新问题并在此处提供链接。
nerdwaller 2015年

好吧,基本上相同的问题只是递归:两个目录中所有文件的仅差异(前n行|除前n行以外的所有内容)。
lanoxx

就像我说的那样,@ lanoxx提出一个新问题并将其链接。对于超级用户社区,这是最佳做法,而不是扩展其他用户问题的范围。
nerdwaller 2015年

1
@Veridian您正在使用什么外壳?这是bash专用的,因此您可能需要致电bash -c "diff <(...) <(...)"
nerdwaller

-1

diff -U(n行)file1 file2


1
欢迎来到超级用户!您能详细说明一下这个-U论点吗?:)
bertieb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.