awk 및 쉘 변수와 혼동됨

awk 및 쉘 변수와 혼동됨

awk를 사용하여 스크립트를 실행하려고 합니다. 오류가 없는 것 같은데 원하는 파일이 생성되지 않네요. 스크립트는 다음과 같습니다.

#!/bin/bash

echo "Number of domain:"
read number
echo "Domain name:"
read domain
more "file.txt" | awk '$2=='$domain' {print $1, "1.0"} $2!='$domain' {print $1,"-1.0"}' >"$number_domain.txt"
echo "DONE"

기본적으로 문서를 만들고 $1을 모두 유지하고 $2를 변경하여 $domain이면 1.0을 쓰고 그렇지 않으면 -1.0을 쓰고 싶습니다.

"" 또는 "" 및 awk "" 및 ""로 텍스트를 작성하는 방법이 혼란스럽습니다.

답변1

행의 마지막 항목

more "file.txt" | awk '$2=='$domain' {print $1, "1.0"} $2!='$domain' {print $1,"-1.0"}' >"$number_domain.txt"

아마도

>"${number}_${domain}.txt"

스크립트가 읽은 두 변수에 해당합니다. 스크립트에서 변수가 빈 문자열이 아닌지도 확인하면 좋을 것입니다. 만약 그들이비어 있으면 awk 스크립트에 오류가 발생합니다.

답변2

셸 변수를 사용하려면 스크립트 자체에 붙여넣기보다는 스크립트 awk에 제공하세요 .awk-v awkvariable="$shellvariable"

awk -v d="$domain" '$2 == d { print $1, "1.0" } $2 != d { print $1,"-1.0" }'

그러면 해당 값 이 변수 값 $domain으로 스크립트에 "가져옵니다" .awkd

스크립트가 올바른 작업을 수행한다면 잘 모르겠지만 나중에 리디렉션에 ${number}대신 사용할 수도 있습니다. 스크립트에는 호출 변수가 없습니다 . 즉, .$numbernumber_domain... >"${number}_$domain.txt"

관련 정보