2017-04-21 30 views
0

任何關於獲取兩個文件的差異或換言之文件的補充的最佳方法的幫助?在Unix或Shell腳本或一些直接的python工具?對文本元素的讚美或刪除文件2在另一個文本文件1

讓我們說:文件1有下面。

  • d
  • Ë
  • Ë
  • ˚F

文件2具有以下文本:

  • d
  • Ë

已知,文件2是文件1a的子集第二輸出應該是:從文件1.文件2的元件的第一次出現的除去於是輸出如下所示:

  • Ë
  • ˚F

換句話說,輸出只不過是文件1中文件2的補充。(排序不是imp ortant)

回答

1
awk 'NR==FNR{a[NR]=$0;n=NR;next} 
    {for(i=1;i<=n;i++)if($0==a[i]){delete a[i];next}print}' file2 file1 

會給你:

A 
B 
E 
F 
15 
A 

的代碼是直截了當的,並告訴他們做什麼。

0

你可以用python做,

file_1_data = open('file_1.txt').read().split('\n') 
file_2_data = open('file_2.txt').read().split('\n') 

for data in file_2_data: 
    if data in file_1_data: 
     file_1_data.remove(data) 

open('file_1.txt','w').write('\n'.join(file_1_data)) 
+0

該方法不照顧其中元件是一式兩份在文件1案件並刪除所有存在的匹配元素在文件2,因此,不期望的輸出,其我問過了。 – Linguist

+0

@Linguist它不會刪除列表中的所有元素,並且您也會獲得所需的輸出。請嘗試一下,然後你就會知道這一點。 –

0

comm是最適合這個任務,但需要有序輸入

$ comm -23 <(sort file1) <(sort file2) 
15 
A 
A 
B 
E 
F 

man comm

comm - compare two sorted files line by line 

    -2  suppress column 2 (lines unique to FILE2) 

    -3  suppress column 3 (lines that appear in both files) 


如果輸出如圖預期輸出需要進行排序

$ comm -23 <(sort file1) <(sort file2) | sort -n 
A 
A 
B 
E 
F 
15 
相關問題