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
로 가져옵니다 .awk
arg
awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"
$2
은(는) 작은따옴표 안에 표시되고 셸은 작은따옴표로 묶인 변수를 확장하지 않기 때문에 여기나 코드에서 두 번째 위치 인수로 해석될 수 없습니다.
OFS
및 arg
(둘 다 변수임) 명령줄에서 설정됩니다 awk
. set을 -v
사용하지 않고 -v
실제 코드 앞에서 잘못된 방식으로 사용하고 있습니다 OFS
. 이렇게 하면 (언급하지 않은) 오류가 발생합니다. 실제로 GNU는 "최적화를 활성화하고 입력 필드 구분 기호를 문자열로 설정"을 의미합니다.-v
awk
-OFS,
awk
S,
(셸 변수)에 보존해야 하는 백슬래시가 포함된 경우 $arg
환경을 통해 값을 전달하는 것이 더 좋습니다. 그렇지 않으면 값이 다음과 같이 해석됩니다 awk
.
arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"
출력 파일은 아마도 $outfile
가 아니라 이어야 합니다 outfile
.
관련된:
- 쉘 변수를 awk에 /pattern/으로 전달합니다.
- awk에서 쉘 변수 사용
- (그리고 많은 다른 사람들)