Command | Query | awk 변수에 저장하거나 함수로 실행 [중복]

Command | Query | awk 변수에 저장하거나 함수로 실행 [중복]

명령 값을 변수에 저장하려고 하는데 오류가 발생합니다.

var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'` 

그것은 나에게 오류를 준다

var: command not found

답변1

=예, 변수 할당에서는 셸에서 공백으로 묶을 수 없기 때문에 오류가 발생합니다 . 쉘은 var인수 =와 명령 대체가 반환하는 모든 것을 사용하여 호출한 명령을 실행하기를 원하기 때문에 해당 행을 해석합니다(추가로 결과를 단어로 분할하고 인용되지 않았기 때문에 해당 단어에 파일 이름 글로빙을 적용한 후).

대신에

var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )

나는 또한 and 를 자유롭게 제거 grep하고 cat백틱을 사용하여 더 이상 사용되지 않는 명령 대체를 백틱을 사용하도록 변경했습니다 $( ... ).

grep, 및 를 사용하여 cut이 작업을 수행 할 수도 있습니다 head.

var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )

또는 특정 횟수의 일치 후에 중지하도록 선택할 grep수 있는 경우:-m

var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )

또는 검색 중인 표현식이 실제로 정규 표현식이 아닌 문자열인 경우:

var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )

관련 정보