awk에 bash 변수를 삽입하는 방법은 무엇입니까? [복사]

awk에 bash 변수를 삽입하는 방법은 무엇입니까? [복사]
  1. awk에 bash 변수를 삽입하려면 어떻게 해야 합니까?(예를 들어 일부 for 루프에서 이 작업을 수행해야 합니다. 다음과 같이 첫 번째 반복에서 awk를 사용하여 첫 번째 열로 문자열을 검색한 다음 두 번째 열로 문자열을 검색합니다.Bash 변수와 다른 모드전혀)

또는

  1. 쉽게 만드는 방법을 찾아보세요전체 패턴(문자열)이를 awk의 매개변수로 받습니다.

awk에 bash 변수를 삽입해 보세요 -

로그가 좀 있어요 -

$ cat > log
test1
test2
ahaha
hahah

그래요

$ cat log | awk '$1~/test1|test2/ {print }'
test1
test2

모든 게 괜찮아

bash 변수를 awk에 붙여넣어야 합니다.

$ a=test1
$ b=test2

그런 다음 삽입하려고합니다.

$ cat log | awk 'BEGIN{a;b} $1~/a|b/ {print }'
ahaha
hahah

$ cat log |  awk -v a=test1 -v b=test2 '$1~/a|b/ {print }'
ahaha
hahah

모든 패턴을 문자열로 가져오고 이를 awk의 매개변수로 받는 방법 -

$ p='$1~/test1|test2/ {print }'

$ cat log | awk p
# get test1
# get test2

답변1

패턴을 awk에 변수로 전달하고 동적 패턴을 사용하여 명시적으로 비교합니다(즉, 문자열의 패턴과 일치).

awk -v pat="$a|$b" '$1 ~ pat' log

또는

awk -v a="$a" -v b="$b" '$1 ~ a "|" b ' log

참고: 정적 모드 /.../(또는 더티 따옴표/이스케이프만)를 사용할 수 없습니다.

답변2

awk는 내부 변수를 확장하지 않습니다 /.../.

하지만

$ cat log |  awk -v a=test1 -v b=test2 '$1 ~ a || $1 ~ b {print }'

그리고

$ p='$1~/test1|test2/ {print }'
$ cat log |  awk "$p"

작동해야 함(테스트되지 않음)

관련 정보