변수를 사용하여 awk 문 내에서 배열 요소 검색

변수를 사용하여 awk 문 내에서 배열 요소 검색

아래는 오류가 발생하는 코드 부분입니다.

for (( p=0; p<${var2}; p++ ))
do

if [[ ${array2[$p]} == *"xyz"* ]]
then
    awk -F" " '{ array3[p]="123" };1' ${array1[$i]}
else
    awk -F" " '{ array3[p]="456" };1' ${array1[$i]}
fi

디버그 모드에서 스크립트를 실행하면 p 값이 고려되지 않는 것을 볼 수 있습니다.

+ awk '-F ' '{ array3[p]="456" };1' oct.csv

나는 스크립트를 실행 중이며 ./script.sh사용 /bin/ksh되는 쉘입니다. 도와주세요.

답변1

우선, 이것은 잘못된 것입니다:

awk -F" " '{ array3[p]="123" };1' ${array1[$i]}

${array1[$i]}은 파일이 아니므로 에 대한 첫 번째 명령줄 인수로 던질 수는 없습니다 awk. 변수를 사용하면 다음과 같이 echo $VARIABLE문자열을 사용해야 합니다 .<<<

awk -F" " '{ array3[p]="123" };1' <<< ${array1[$i]}

둘째, 범위 문제가 있습니다. 코드 array3[p]="123"내에서만 존재하므로 awk코드 외부에 아무것도 할당할 수 없습니다. 하지만 당신이 할 수 있는 일은 간단하다.

array3[$p]="123"

$i스크립트에서 정확히 어디에서 왔는지도 불분명합니다 . 전반적으로 귀하의 질문은 약간의 코드를 제공하지만 귀하의 질문에 완전히 답할 수 있는 단서는 제공하지 않습니다.

관련 정보