linux: 한 파일에서 다른 파일로 vlookup 사용

linux: 한 파일에서 다른 파일로 vlookup 사용

File2(표준 파일)의 필드를 사용하여 File1에서 일치하는 문자열을 인쇄하고 싶습니다. 아래 awk 명령을 시도했지만 결과의 첫 번째 줄만 인쇄하는 대신 File1 문자열에서 일치하는 모든 필드를 가져오고 싶습니다.

    cat File1
    AAA,20190221,00-00,100
    AAA,20190221,01-00,110
    AAA,20190221,02-00,120
    BBB,20190221,00-00,110
    BBB,20190221,01-00,110
    BBB,20190221,02-00,110
    CCC,20190221,00-00,110
    CCC,20190221,01-00,140
    CCC,20190221,02-00,150

    cat File2
    AAA
    BBB

아래 awk 메소드를 사용하고 있습니다.

    awk -F"," -f vlookup.awk File1 File2
    (cat vlookup.awk)
    FNR==NR{
    a[$1]=$4
    next}
    { if ($1 in a) {print $1"," a[$1]} else {print $1, "NA"}  }

내가 얻는 결과는 다음과 같습니다.

    AAA,100
    BBB,110
    NA

하지만 때때로 증가하거나 감소할 수 있는 File1의 모든 값을 인쇄해야 합니다. 내 예상 결과는

AAA,100
AAA,110
AAA,120
BBB,110
BBB,110
BBB,110

답변1

AWK 스크립트는 열 1을 인덱스로 사용하여 File1열 1의 각 키에 대한 열 4의 마지막 값을 배열에 저장합니다 . a그런 다음 에 있는 모든 배열 키와 값을 인쇄합니다 File2.

입력 파일의 순서를 변경하고 키 배열을 만든 File2다음 File1해당 배열과의 행을 비교해야 합니다.

vlookup2.awk

FNR==NR {
  a[$0]=1  # Set a value in array a using current line as index
  next     # Stop processing this line, do not check other rules
}
$1 in a {  # if column1 matches any index in array a
  print $1 "," $4 # the columns you want
}

달리기

awk -F "," -f vlookup2.awk File2 File1

얻기 위해

AAA,100
AAA,110
AAA,120
BBB,110
BBB,110
BBB,110

참고: 저는 File2를 첫 번째 매개변수로 사용하고 있습니다.

참고: AWK 스크립트, 샘플 파일 및 출력에 문제가 있는 것 같습니다. 두 줄이 나옵니다

AAA,120
BBB,110

이는 File1의 마지막 몇 행이며 열 1의 키에 해당합니다. 예제 출력에는 의 첫 번째 줄이 표시됩니다 AAA.

줄을 서요

 NA

(앞에 공백이 옴 NA) File2 다음에 빈 줄이 오는 경우에만 해당됩니다 BBB.

관련 정보