설명하다

설명하다

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

두 값과 함께 두 파일 모두에 키가 나타나는 필드만 출력하고 싶다고 생각합니다. 에서 언급했듯이스파크호크의 답변, 올바른 도구는 joinAWK를 사용하여 다음을 수행할 수 있습니다.

#!/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: 두 파일을 연결합니다.

관련 정보