解释

解释

我有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的字段1
  • file1.txt file2.txt: 连接这两个文件。

相关内容