awk 명령에 스크립트 매개변수 전달

awk 명령에 스크립트 매개변수 전달

파이프로 구분된 파일이 있고 첫 번째 열을 grep해야 하며 패턴이 일치하면 전체 줄을 인쇄합니다. 아래 명령은 작동하지만 스크립트에 넣으면 $1명령과 충돌하는 것 같습니다.

주문하다:

awk -F'|' < filename '{if ($1 == "stringtomatch") print $0}'

스크립트:

./scripts.sh stringtomatch

스크립트의 명령:

awk -F'|' < filename '{if ($1 == "$1") print $0}'

큰따옴표로 묶인 $1매개변수는 스크립트에 전달됩니다. 이 작업을 수행하는 방법에 대한 제안이 있습니까?

답변1

을 크게 단순화할 수 있습니다 awk. 표현식이 로 평가되면 기본 작업은 true현재 줄을 인쇄하는 것입니다. 따라서 이는 동일한 작업을 수행합니다.

awk -F'|' < filename '$1 == "string"'

어쨌든 이 -v옵션을 사용하여 변수를 전달할 수 있습니다. 따라서 스크립트는 다음과 같을 수 있습니다.

#/bin/sh

if [ $# -lt 1 ]; then
  echo "At least one argument is required"
  exit
fi

## Allow the script to get the filename from the 2nd argument, 
## default to 'filename' if no second argument is given
file=${2:-filename}

awk -F'|' -v str="$1" '$1 == str' "$file"

관련 정보