중첩된 Awk 및 변수 비교

중첩된 Awk 및 변수 비교

나는 awk를 배워야 한다는 것을 깨달았습니다. 이것은 정말 멋진 일이지만 작은 문제에 직면하고 있습니다.

출력이 파이프되도록 설계된 스크립트가 있습니다. 우리는 그것을 매트릭스라고 부릅니다.

또한 내가 완전히 제어할 수 있고 원하는 방식으로 형식을 지정할 수 있는 로컬 텍스트 파일 blacklist.txt가 있습니다. 1개의 열(또는 값 집합)만 포함됩니다.

스크립트를 실행하고, 파이프하고, 결과 열 값 중 하나를 텍스트 파일의 각 행(또는 쉼표로 구분된) 값과 비교하고, 일치하면 다른 작업을 수행하고 싶습니다.

다음 명령을 실행하고 싶습니다(일부 의사 코드 포함).

matrix username |    // this returns an output and is piped
// I then want to awk in a blacklist of usernames from my file,
//not sure if I should use getline
awk '{print $1}' blacklist.txt
// And now, I would like to compare the two, and execute another command
if($4 from matrix == $1 from blacklist.txt) {
  matrix doSomething
}
else {
  print "Not valid"
}

어떤 조언이라도 대단히 감사하겠습니다. 감사해요.

답변1

이는 다음 두 가지 기능을 사용하여 수행할 수 있습니다 awk.

  1. 문자열로 인덱싱된 배열
  2. 내장 변수FILENAME

스크립트는 기본 필드 구분 기호를 사용하며 blacklist.txt한 줄에 하나의 필드를 포함합니다. 필요에 맞게 조정하세요.

#!/bin/sh

awk '
    FILENAME == "blacklist.txt" {
        blacklist[$0] = 1
        next
    }
    blacklist[$4] {
        print $4, $0
    }
' blacklist.txt -

관련 정보