Объяснение

Объяснение

У меня есть 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 и полю 1 файла 2
  • file1.txt file2.txt: объединить эти два файла.

Связанный контент