2010-07-14 93 views
3

dir中有100個文件,並且有2對文件。如何在shell腳本中找到2個文件的區別

我想找到shell腳本

File 1: 
Operating System : Windows XP 
Operating System : Windows NT 
Operating System : Windows 2008 

FILE 2: 
Windows XP 
Windows NT 
Windows2008 

(例如Windows 2008中(文件1)的Windows2008(文件2))2個文件之間的差異。

但最後這兩個文件沒有任何區別。

如何實現這一目標?

這些文件在linux主機上,想做shell腳本嗎?

+0

這個問題很不清楚。它是100個文件還是兩個文件,你想比較? 「shell腳本」是什麼意思?這是一個Unix術語;除非使用像Cygwin這樣的Unix模擬環境,否則Windows只有批處理,命令和PowerShell腳本。 – 2010-07-14 08:56:50

+0

in dir there will File1.host.pg1.txt and file1.host.pg2.txt and file1.host2.pg1.txt .... like this – Tree 2010-07-14 08:58:25

+0

我想在linx做 – Tree 2010-07-14 09:00:52

回答

2

我們用Perl和diff吧? cut並不完成這項工作。爲了忠實於您的原始評論,我將在每行輸入中查找'Widnows'後面的單詞,並創建一個僅包含這些單詞的新文件。然後我要區分這些文件。

每當我發佈Perl,每一次,我都有一堆StackOverflowers批評它。所以,準備好一些壞的Perl。它可能會工作。我的聲譽可以降低讚譽,我真的很想在這裏幫助。

首先,Perl腳本(稱之爲preparse.pl):

my $f = shift @ARGV; 
open FILE, "<$f" or die("Couldn't open file!"); 
while (<FILE>) { 
    print "$1\n" if $_ =~ /Widnows(\s?)*?(\S+)\s*/; 
} 

現在,命令運行:

preparse.pl file1 > file1.tmp 
preparse.pl file2 > file2.tmp 
diff file1.tmp file2.tmp 

隨意做出這一大Perl腳本。隨你。

1

的問題是太不精確,但試試這個:

diff <(sed 's/Operating System : //' file1.txt) file2.txt 
2

diff工具在大多數系統上,而-u統一的輸出是最流行的。

$ diff -u file1 file2 
--- file1 2010-07-14 02:08:20.000000000 -0700 
+++ file2 2010-07-14 02:08:29.000000000 -0700 
@@ -1,3 +1,3 @@ 
-Operating System : Windows XP 
-Operating System : Windows NT 
-Operating System : Windows 2008 
+Windows XP 
+Windows NT 
+Windows2008 

如果你想有一個字的字DIFF相反,你可以使用不常見的工具,如wdiff

$ wdiff file1 file2 
[-Operating System :-]Windows XP 
[-Operating System :-] 
Windows NT 
[-Operating System : Windows 2008-] 
{+Windows2008+} 

如果你想有一個更直觀明顯鑑於兩個差異文件,您可以使用工具,如xxdiffkdiff3或類似的。 (有一個的很多三路合併圖形比較工具。)

如果你想要的東西,可能會更容易編程方式使用,該cmp程序可以在文件中列出的所有字節DIF ferences:

$ cmp -l file1 file2 
1 117 127 
2 160 151 
3 145 156 
... 

cmp對於非常接近相同的文件可能更有用。

1

如果您正在對比3個文件或vimdiff,我會使用diff,diff3。

相關問題