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つのファイルをリンクします。