
我有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
答案1
我認為您只想輸出其鍵出現在兩個文件中的欄位以及兩個值。如中所提到的斯帕霍克的回答,正確的工具是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
),並且對於每一行,如果值是在在第一個檔案中看到,輸出鍵、儲存的值和目前檔案中的值。
答案2
awk
對於此任務,有一個比以下更簡單的工具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
: 連接這兩個檔案。