awk의 패턴으로 사용될 Bash 함수에 인수를 전달합니다.

awk의 패턴으로 사용될 Bash 함수에 인수를 전달합니다.

Bash 함수에 인수를 전달하여 awk 모드로 작동하는 방법을 알고 싶습니다. 동일한 질문에 대답하는 경향이 있는 여러 Q&A를 읽었지만 뭔가 빠졌습니다.

나는 다음 한 줄의 코드를 사용하여 Arch Linux를 사용하여 패키지(이 경우 vivaldi)를 찾습니다 packman.

 pacman -Sl | awk '$2~ /^vivaldi/{print $2, $3, $4, "[" $1 "]"}' | sort

다음 함수를 작성했지만 실행하면 출력이 생성되지 않습니다.

function pacname() {
    #pattern="$1"
    pacman -Sl | awk -v pattern="$1" '$2~ /^"pattern"/{print $2, $3, $4, "[" $1 "]"}' | sort
}

답변1

/.../Awk의 정규식 에서는 변수가 확장되지 않습니다 . 대신 문자열 형식을 사용하여 "^"pattern앵커 연산자를 변수 패턴 값과 연결할 수 있습니다.

전임자.

echo 'baz foobar' | awk -v pattern="foo" '$2 ~ "^"pattern {print $1}'
baz

관련 정보