2017-01-21 54 views
0

我有2個大的文本文件file1.txtfile2.txt比較2個文本文件和輸出線獨特的只有1個文件,而忽略大小寫

每個文件都包含一行分隔的名稱列表例如

FILE1.TXT

Beth 
james 
James 
paul 
Paul 
sally 

FILE2.TXT

James 
Paul 
Sally 

我想產生含有獨特之處在於file1.txt名,同時忽略大小寫,所以在上面的示例文件我想要一個看起來像這樣的文件:

comparison.txt

Beth 

使用命令comm -23 file1.txt file2.txt > comparison.txt產生不正確的結果:

Beth 
james 
paul 
sally 

使用-i命令也產生不正確的結果:

Beth 
James 
Paul 

缺少什麼我在這裏?

回答

0

您可以使用AwkPOSIX兼容的字符串函數tolower進行不區分大小寫的查找。

awk 'FNR==NR{unique[tolower($0)]++; next}!(tolower($0) in unique)' file2.txt file1.txt 
Beth 

重新定向到一個文件comparison.txt作爲

awk 'FNR==NR{unique[tolower($0)]++; next}!(tolower($0) in unique)' file2.txt file1.txt > comparison.txt 
cat comparison.txt 
Beth 

邏輯背後的想法是

所以我我沒如下解決方案的理解,

  1. FNR==NR{unique[tolower($0)]++; next}將在file2.txt 上存儲en以陣列爲例,以敏感詞爲例,直到 結束file2.txt
  2. 現在上file1.txt,我可以通過做 !(tolower($0) in unique)匹配來自其他文件的那些行,這將給我所有的行中 file1.txt,其線條不是file2.txt

(或)存在,如果您使用訪問GNU grep對文件進行否定匹配,用-i進行護理不敏感查找

grep -viFxf file2.txt file1.txt 
Beth 
+0

你的第一個方法工作完美,謝謝! – bullhorn

+0

@bullhorn:高興地幫忙!確保你瞭解未來參考的用法! – Inian

相關問題