2013-10-16 231 views
1

我有一种情况,我有一个源文件和目标文件,应该是相似的。 源文件具有如下所示的信息集。我需要比较源文件和目标文件中的每组信息。如果目标文件中缺少任何内容,我需要将该行写入目标文件。 我可以一行一行地进行匹配,但源文件和目标文件的集合并不正确。 请帮助我如何使用shell脚本实现。Unix Shell脚本

源文件:

[Set.1] 
value=1 
date=today 

[Set.2] 
value=2 
date=today 

目标文件:

[Set.2] 
value=2 

[Set.1] 
value=1 
date=today 

如果你能看到,日期中缺少目标文件的[Set.2],所以,我需要把它从复制源文件。

+0

两个文件中的数据是相同的还是只有相同的模式 – suhas

+0

数据是相同的。我们需要最终填补空白,以使它们相同。 – user1999315

回答

0

通过file_set2和file_set1下面的命令将进行比较,如果file_set1中存在file_set2中缺少的任何内容将被复制回file_set2。

awk 'FNR==NR{a[$0];next}!($0 in a)' file_set2 file_set1 >>file_set2 
+0

这将不起作用,因为'date = today'这行在两个文件中都存在,但不是两个位置都是file_set2中需要它的位置。 – msw

0

,你可以尝试使用rsync

rsync /target/file/path /source/file/path 
+0

你好,rsync看起来是一个简单的选择,但我的src文件是一种增量文件。 tgt_file具有缺少字段的更多信息,可以在src-delta文件中找到。我只需要从src_file中复制内容,同时保持完整的target_file。 – user1999315

0

这可能是一个很简单的问题或一个很难。如果你只是需要使文件相同,然后

cp source_file target_file 

就足够了。但似乎你想保持target_file中的部分的顺序不变。这将要求您首先解析文件请记住章节的顺序。

由于这是Windows INI文件格式,因此对于阅读程序的章节顺序不应该是重要的。检查以确定读者是否真的在乎。

+0

感谢您的投入。就像我在下面提到的,src-file是一种delta,所以通过引用多个src文件,我更新了tgt文件。虽然排序不是问题,但是一个集合中的数据可以重复。所以,当在tgt文件中进行选择时,我需要记住标题行...... !! – user1999315