我有两个文件,a 和 b。我想比较这两个文件并获取第三个文件中的差异以及文件名。谁能帮我一个简单的命令。
答案1
diff a b > differences
应该做这项工作。两个文件之间的差异将被存储在文件中differences
。
答案2
您可以使用grep函数来查看差异(file3 是输出文件):
grep -Fxvf file1 file2 > file3
标志在哪里:
-F
:将 PATTERN 解释为固定字符串列表,以换行符分隔,其中任何一个都将被匹配。-x
:仅选择那些与整行完全匹配的匹配项。-v
:反转匹配的意义,选择不匹配的行。-f
FILE :从 FILE 中获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。
使用 flag -n
:在输出的每一行前面加上输入文件中的行号作为前缀:
grep -n -Fxvf file1 file2 > file3
答案3
gnu 差异
前提是你有 gnu diff(来自 diffutils diff (GNU diffutils) 3.3
)。
diff --old-line-format='old %L' --new-line-format='new %L' --unchanged-group-format='' u v
old PV Name /dev/dsk/c0t4d0
new PV Name /dev/dsk/c99t4d0
(重定向到文件的说明如下)。
awk 的基本差异
有了基本的 diff,使用 awk 来解析 '<' 和 '>'
diff u v
178c178
< PV Name /dev/dsk/c0t4d0
---
> PV Name /dev/dsk/c99t4d0
使用 awk 来输入文件名
diff u v | awk '$1 == "<" { printf "u: %s\n",$0; next ; }
$1 == ">" { printf "v: %s\n",$0 ; next ; }
{ print;} '
178c178
u: < PV Name /dev/dsk/c0t4d0
---
v: > PV Name /dev/dsk/c99t4d0
(为了可读性,将 awk 行分开)
现在存储到 diff 文件中
diff u v | awk '$1 == "<" { printf "u: %s\n",$0; next ; } $1 == ">" { printf "v: %s\n",$0 ; next ; } { print;} ' > differences