다음 코드가 있습니다.awk ignore case with NR
awk -F":" -v bookName="$bookName" -v newTitle="$newTitle" -v lineNum="lineNum" 'NR==lineNum{gsub(bookName, newTitle)}1'
이 코드는 기본적으로 책 제목을 새 제목으로 업데이트합니다. lineNum
에는 설정된 줄 번호 값이 들어 있지만 코드는 여기에 표시되지 않습니다.
이 코드 줄에서 bookName의 대소 문자를 무시하고 싶지만 시도한 다음 코드는 작동하지 않습니다.
awk -F":" -v bookName="$bookName" -v newTitle="$newTitle" -v lineNum="$lineNum" 'BEGIN{IGNORECASE=1} NR==lineNum{gsub(bookName, newTitle)}1'
왜 그렇습니까? John's 응답에 따라
편집
*이 최신 편집: 그래서 기본적으로 내 코드는 다음과 같습니다 :
read -r bookName
read -r authorName
if grep -iqx "$bookName:$authorName" cutText.txt
then
lineNum=`awk -F":" -v bookName="$bookName" 'BEGIN{IGNORECASE=1} $0 ~ bookName ":" authorName {print NR}' BookDB.txt`
echo $lineNum
else
echo "Failed"
fi
cutText.txt에는 다음이 포함
Hairy Potter:Rihanna
MARY IS A LITTLE LAMB:Kenny
Sing along:May
BookDB.txt는
을 포함Hairy Potter:Rihanna:2:5:20
MARY IS A LITTLE LAMB:Kenny:39:2:1
Sing along:May:38:2:48
"Mary is little lamb"을 bookName
으로, "Kenny"를 authorName
으로 입력하면 프로그램은 2
을 출력합니다. 그러나 $lineNum
은 출력을 생성하지 않습니다.
'-v lineNum = "lineNum"을'-v lineNum = "$ lineNum"'으로 바꾸면 제대로 작동합니다. – John1024
교체 후 awk는 여전히 대체하지 않습니다. 예를 들어 "MARY IS LAMB"라는 문자열이 있고'bookary' 변수를 "mary is lamb"로 입력하면 변수 newTitle을 subtit하지 않습니다 – JamesPoppycock
Works4me. 그것이 당신을 위해 작동하지 않는다면, 당신은 어떤 문제를 보여주기 위해 몇 가지 샘플 입력과 출력을 보여주십시오. 일반적인 생각은 질문에 [최소한의 완전하고 검증 가능한 예]가 있어야한다는 것입니다 (http://stackoverflow.com/help/mcve). 지금까지이 질문은 완전하고 검증할만한 것이 아닙니다. – John1024