나는 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
.
- 문자열로 인덱싱된 배열
- 내장 변수
FILENAME
스크립트는 기본 필드 구분 기호를 사용하며 blacklist.txt
한 줄에 하나의 필드를 포함합니다. 필요에 맞게 조정하세요.
#!/bin/sh
awk '
FILENAME == "blacklist.txt" {
blacklist[$0] = 1
next
}
blacklist[$4] {
print $4, $0
}
' blacklist.txt -