Unix 差异和--“GTYPE组格式”;

Unix 差异和--“GTYPE组格式”;,unix,command-line,diff,Unix,Command Line,Diff,我有两个文件要与diff进行比较。更改的行应具有前缀“U”,新行“I”和删除的行“D”: 文件1: 1 2 3 4 5 文件2: 1 2a 4 5 6 diff --old-group-format="D %<" \ --new-group-format="I %>" \ --changed-group-format="U %>" \ --unchanged-group-format="" file1 file2 但是它在哪里 D 3 这是一种不同的分组方式。在您的ch

我有两个文件要与
diff
进行比较。更改的行应具有前缀“U”,新行“I”和删除的行“D”:

文件1:

1
2
3
4
5
文件2:

1
2a
4
5
6

diff --old-group-format="D %<" \
--new-group-format="I %>" \
--changed-group-format="U %>" \
--unchanged-group-format="" file1 file2
但是它在哪里

D 3

这是一种不同的分组方式。在您的
changed
组中,您打印的是新的更改,而不是旧的更改,这将是

U 2
3
因此,diff看到的分组是:

`1 -> 1` unchanged
`2,3 -> 2a` changed
`4,5 -> 4,5` unchanged
`  -> 6` new
为了让diff将比赛归为“旧”组,比赛前后必须保持不变。如果file2是这样的:

1a
2
4
5
6
如果运行相同的diff命令,则会得到以下结果:

U 1a
D 3
I 6
因为有一个未更改的
2->2
4->4
,所以缺少的3被分组为“旧的”。

以补充:

虽然您不能直接使用
--组格式
选项始终显示已删除的行(如Jon的回答中所述),但
--并排
-y
)输出格式选项确实包含所需的信息,您可以使用
awk
根据需要重新格式化:

diff --suppress-common-lines --side-by-side file1 file2 | 
 awk -F'\t+' '$2 ~ / +\|/ { print "U " $3 }
              $2 ~ / +</  { print "D " $1 }
              $2 ~ / +>/  { print "I " $3 }'
上面的
awk
命令通过以下
--并排输出产生:

2                                 | 2a
3                                 <
                                  > 6
2 | 2a
3                                 <
> 6

好的,之前和之后都必须有一个不变的订单,但我无法控制订单。是否有其他方法获得结果?如果答案解决了您的问题,请单击大复选标记接受答案(✓) 旁边。如果您发现其他答案有帮助,请向上投票。接受和向上投票的答案不仅有助于回答的人,也有助于未来的读者。请查看。如果您的问题尚未完全回答,请提供反馈。
U 2a
D 3
I 6
2                                 | 2a
3                                 <
                                  > 6