歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

awk雙文件互相匹配查找

說明:藍色=命令名稱

      淺綠=命令參數

      淺藍=選項

      紫色=目錄

      系統環境:CentOS  6.2  i686

要求

文件a: 
10/05766798607,11/20050325191329,29/0.1,14/05766798607 
10/05767158557,11/20050325191329,29/0.08,14/05767158557 

文件b: 
05766798607 
05766798608 
05766798609 
通過文件a和文件b對比,輸出結果如下:
10/05766798607,11/20050325191329,29/0.1,14/05766798607

方法:a) awk -F"[/,  ]" '{if(NR==FNR){a[$1]}else if($2 in a)print $0}' b a

650) this.width=650;" border=0>

解析:NR為主體行號,FNR為單位文件行號。{if(NR==FNR){a[$1]} 將b文件中的數據放入數組a,else if($2 in a)print $0}' 主要是對b文件內容的操作,判斷第二個域中數據是否與a數組中的數據匹配,匹配則打印本行。

b)精簡法:awk -F"[,/ ]" '{a[$1]}{if($2 in a)print $0}' b a

650) this.width=650;" border=0>

解析:-F"[,/ ]" 用,或/ 做分隔符,'{a[$1]}{if($2 in a)print $0}' 用第一個域的值作為數組a的下標,判斷第二個域是否與數組a(a數組中的有用數據也就為數組a文件中的,即前三行)中的匹配,因為先讀入b文件,且b文件中只有一個域,所以此時判斷只與a文件有關,最後打印匹配行信息。

Copyright © Linux教程網 All Rights Reserved