説明

説明

ファイルが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: これら 2 つのファイルを結合します。

関連情報