歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> awk雙文件互相匹配查找

awk雙文件互相匹配查找

日期:2017/2/28 15:47:27   编辑:Linux教程

說明:藍色=命令名稱

淺綠=命令參數

淺藍=選項

紫色=目錄

系統環境: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