0
私は以下のコードを持っています。awk無視の場合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 a little lamb"をbookName
、ケニーをauthorName
と入力すると、プログラムは2
と出力されます。ただし、$lineNum
は出力を生成しません。
'-v lineNum =" lineNum "を' -v lineNum = "$ lineNum" 'に置き換えると、うまく動作します。 – John1024
置き換え後、awkはまだ置き換えられません。たとえば、文字列 "MARY IS LAMB"があり、 'bookary'変数を" mary is lamb "と入力すると、変数newTitleに代入されません – JamesPoppycock
Works4me。それがうまくいかない場合は、サンプルの入力と出力を表示して、どのような問題があるかを示してください。一般的な考え方では、質問に[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を含める必要があります。これまでのところ、この質問は完全でも検証可能でもありません。 – John1024