Text-Processing
使用 awk 比較兩個文件
我有 2 個文件。
文件 1 包含:-
emcas_biaas_dev=-628 emcas_brs_ba=-32 emcas_cc_analytics=246 emcas_edservices_bi=312 emcas_edservices_dev=-159 emcas_engr_usd=1519 emcas_engr_xio=-67 emcas_fin_bi=9
文件 2 包含:-
emcas_bdl_migrate=2 emcas_biaas_dev=63 emcas_brs_ba=430 emcas_cc_analytics=2231 emcas_clm_reporting=16 emcas_collab_xsat=6241 emcas_cpsd_cee=11 emcas_cpsd_hcp=0 emcas_e2ep_ba=187 emcas_edservices_bi=955 emcas_edservices_dev=374 emcas_elms_analytics=0 emcas_engr_clm=3 emcas_engr_scaleio=0 emcas_engr_usd=2669 emcas_engr_xio=340 emcas_fin_bi=333 emcas_fin_drr=5528
我希望將所需的輸出放在單獨的文件中:-
emcas_biaas_dev=-628=63 emcas_brs_ba=-32=430 emcas_cc_analytics=246=2231 emcas_edservices_bi=312=955 emcas_edservices_dev=-159=374 emcas_engr_usd=1519=2669 emcas_engr_xio=-67=340 emcas_fin_bi=9=333
對於這個任務,一個比
awk
is更簡單的工具join
:join -t '=' -1 1 -2 1 file1.txt file2.txt
解釋
請參閱
man join
以獲取更多資訊,但是:
-t '='
:=
用作分隔符-1 1 -2 1
: 加入文件 1 的欄位 1 和文件 2 的欄位 1file1.txt file2.txt
: 加入這兩個文件。
我認為您只想輸出其鍵出現在兩個文件中的欄位,並且具有兩個值。正如Sparhawk 的回答中提到的,正確的工具是
join
. 使用 AWK,以下工作:#!/usr/bin/awk -f BEGIN { OFS = FS = "=" } FNR == NR { values[$1] = $2 } FNR < NR { if (values[$1]) { print $1, values[$1], $2 } }
首先將輸入和輸出欄位分隔符設置為“=”,然後解析第一個文件 ( ) ,
FNR == NR
將其所有值儲存在values
關聯數組中,然後解析任何後續文件 (FNR < NR
在第一個文件中看到,輸出鍵、儲存的值和目前文件中的值。