Awk 매개변수 $1,$2가 bash 입력 매개변수와 충돌합니다.

Awk 매개변수 $1,$2가 bash 입력 매개변수와 충돌합니다.

bash 스크립트에 awk 명령을 추가하고 싶습니다. bash 스크립트에는 일부 입력이 필요하며 입력은 $1, $2 and etc. 을(를) 호출할 때 awk이를 사용하여 테이블의 위치를 ​​정의하고 싶은데 $1어떻게 해야 합니까?

example.sh

#! /user/bin/bash
arg=$1
outfile=$2
awk -F, -OFS, -v '{$2="$arg"; print}' > outfile

이 스크립트에서는 이 문제를 어떻게 $2방지 $outfile할 수 있습니까?

답변1

명령에 일부 오류가 있습니다 awk.

다음은 변수 $arg로 가져옵니다 .awkarg

awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"

$2은(는) 작은따옴표 안에 표시되고 셸은 작은따옴표로 묶인 변수를 확장하지 않기 때문에 여기나 코드에서 두 번째 위치 인수로 해석될 수 없습니다.

OFSarg(둘 다 변수임) 명령줄에서 설정됩니다 awk. set을 -v사용하지 않고 -v실제 코드 앞에서 잘못된 방식으로 사용하고 있습니다 OFS. 이렇게 하면 (언급하지 않은) 오류가 발생합니다. 실제로 GNU는 "최적화를 활성화하고 입력 필드 구분 기호를 문자열로 설정"을 의미합니다.-vawk-OFS,awkS,

(셸 변수)에 보존해야 하는 백슬래시가 포함된 경우 $arg환경을 통해 값을 전달하는 것이 더 좋습니다. 그렇지 않으면 값이 다음과 같이 해석됩니다 awk.

arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"

출력 파일은 아마도 $outfile가 아니라 이어야 합니다 outfile.

관련된:

관련 정보