比较两个文件并以特定格式打印差异而不使用“diff”命令

时间:2015-12-02 21:01:52

标签: awk sed diff

嗨我有两个文件,每个文件包含1行数据。通常我只是使用diff命令来查看这两个文件之间的区别。

 file1:
    a.tag
    b.tag
    c.tag

 file2:
   a.tag
   b.tag
   d.tag

我想要一个命令,它只是向我显示文件的不同之处,并且还提供了此格式的文件名。我使用差异,但如果只是不做我想要的..我希望外观看起来像这样..

我喜欢做什么:比较这两个文件,并以这种格式打印每个文件中不同的文件:

 file1:c.tag
 file2:d.tag
你能帮帮忙吗?

1 个答案:

答案 0 :(得分:3)

实际上diff命令提供了非常灵活的输出选项。您可以使用此命令:

diff 
  --unchanged-line-format='' \
  --old-line-format='file1:%L' \
  --new-line-format='file2:%L' \
  file1 file2

输出:

file1:c.tag
file2:d.tag

我对旧行和新行使用%L转义序列。 %L表示打印该行的内容。由于我为此传递了一个空字符串,因此将忽略未更改的行。

要概括它并使其与任意文件名一起使用,您可以将其包装到shell函数中。把它放到你的bashrc中,例如:

function mydiff() {
    diff 
      --unchanged-line-format='' \
      --old-line-format="$1:%L" \
      --new-line-format="$2:%L" \
      "$1" "$2"
}

获取bashrc或启动一个新的shell并按如下方式调用它:

mydiff file1 file2