2013-10-16 270 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