【发布时间】:2016-01-28 17:02:09
【问题描述】:
我正在寻找高级两个文件比较 shell/bash/php。假设我有这样的文件:
文件1
.run file=test_script.sql rev=1.1
.run file=test_sql.sql rev=1.1
.run file=test_drop.sql rev=1.2
文件2
.run file=test_drop.sql rev=1.2
.run file=test_grant.sql rev=1.1
.run file=test_script.sql rev=1.2
获取这些文件之间的差异(忽略行顺序)
.run file=test_grant.sql rev=1.1 #(because new line wasn't in file1 at all)
.run file=test_script.sql rev=1.2 #(because rev changed from rev=1.1 to rev=1.2)
但这还不是全部,我想检查旧文件中是否存在相同的(.run 文件=名称),如果是,则获取它的(rev=编号)。这样最终的输出将如下所示:
文件3:
test_grant.sql 1.1 1.1
test_script.sql 1.1 1.2
到目前为止:
fgrep -x -v -f file1 file2
得到
.run file=test_grant.sql rev=1.1
.run file=test_script.sql rev=1.2
【问题讨论】:
-
不多:fgrep -x -v -f file1 file2 得到
.run file=test_grant.sql rev=1.1.run file=test_script.sql rev=1.2 -
file参数在每个文件中是否唯一? -
是的,它们是唯一的,在同一个文件中不能是 file= 同名
-
你为什么忽略
test_sql被删除的事实? -
此时我不需要有关已删除内容的信息,只需要新添加或更改。这将使最终输出更加复杂,因为我将在收集的信息上做进一步的工作。除非它将保存在单独的文件中,否则仅将添加和更改的内容告诉一个文件,例如:file_added_modified:
.run file=test_grant.sql rev=1.1 .run file=test_script.sql rev=1.2,以及删除的文件,例如:file_removed:.run file=test_sql.sql rev=1.1