Text-Processing

使用 awk 比較兩個文件

  • August 27, 2018

我有 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

對於這個任務,一個比awkis更簡單的工具join

join -t '=' -1 1 -2 1 file1.txt file2.txt

解釋

請參閱man join以獲取更多資訊,但是:

  • -t '=':=用作分隔符
  • -1 1 -2 1: 加入文件 1 的欄位 1 和文件 2 的欄位 1
  • file1.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在第一個文件中看到,輸出鍵、儲存的值和目前文件中的值。

引用自:https://unix.stackexchange.com/questions/465035