2013-10-30 50 views
1

假設我有兩個文本文件不同之間的兩個文本文件

文件1

hello i am John 
    and i live in Cairo 

文件2

hello i am Jogn 
    and i love in Cairo 

,我需要列出詞語只(未空間或不同其他任何東西)在兩個文本之間得到結果作爲文件3,其將包含如下列表中的兩個詞語

file1  file2 
    John  Jogn 
    live  love 

我該怎麼做?

我曾嘗試

diff file1 file2 

,但它並不能幫助根據需要

感謝

+0

你必須寫一個shell腳本,如果格式是很重要的。 –

+0

什麼是'想要的結果'? – stackoverflowuser2010

+0

嘗試'diff --suppress-common-lines -side-side',它給出的輸出幾乎是你想要的格式,你可以在後面添加文件名,也可以在 – abasu

回答

0

使用

awk ' 
    # BEGIN: print 1th & 2th args 
    BEGIN{print ARGV[1], ARGV[2]} 
    # if the current line is from "file1", 
    # put line in the array "a" with the line number for key 
    FNR==NR{a[NR]=$0} 
    if current line is from "file2" 
    FNR!=NR{ 
     # iterate over words of the current line 
     for (i=1; i<=NF; i++) { 
      # split a[key current line] array in array "arr" 
      split(a[FNR], arr) 
      # test if both file1 and file2 Nth element match 
      if (arr[i] != $i) { 
       print arr[i], $i 
      } 
      } 
    } 
' file1 file2 

輸出:

/tmp/l1 /tmp/l2 
John Jogn 
live love 
+0

你能解釋一下嗎? – Edward

+0

發表了相應的評論 –

2

使用wdiff命令得到的結果。

如果你沒有它,它在「wdiff」包中,它應該在你係統的倉庫中可用。

$ wdiff file1 file2 
hello i am [-John-] {+Jogn+} 
and i [-live-] {+love+} in Cairo 

如果你想有一個圖形顯示,該meld程序做了很好的工作(安裝「合併」包,如果你還沒有的話)。

如果您需要特定的輸出格式,您需要編寫一個腳本。一個好的開始可能是篩選每個輸入文件,將每個單詞放在一行(fmt -w 1是第一個近似值),然後對結果進行比較。

+0

下工作,但是我怎樣才能把結果列在兩列中有問題嗎? – user1200219

相關問題