gnu 差异

gnu 差异

我有两个文件,a 和 b。我想比较这两个文件并获取第三个文件中的差异以及文件名。谁能帮我一个简单的命令。

答案1

diff a b > differences应该做这项工作。两个文件之间的差异将被存储在文件中differences

答案2

您可以使用grep函数来查看差异(file3 是输出文件):

grep -Fxvf file1 file2 > file3

标志在哪里:

  • -F:将 PATTERN 解释为固定字符串列表,以换行符分隔,其中任何一个都将被匹配。
  • -x:仅选择那些与整行完全匹配的匹配项。
  • -v:反转匹配的意义,选择不匹配的行。
  • -fFILE :从 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

相关内容