我被告知我在下面的代碼中以錯誤的方式使用了awk,但是我對如何提高我的代碼以便讀取更加簡單感到驚訝。在錯誤的方法中使用awk
Hairy Potter:Rihanna
MARY IS A LITTLE LAMB:Kenny
Sing along:May
這個程序基本上更新cutText.txt新標題:如下圖所示
read -r bookName
read -r authorName
if grep -iqx "$bookName:$authorName" cutText.txt
then
lineNum=`awk -v bookName="$bookName" -v authorName="$authorName" '$0 ~ bookName ":" authorName {print NR} BEGIN{IGNORECASE=1}' BookDB.txt`
echo "Enter a new title"
read -r newTitle
awk -F":" -v bookName="$bookName" -v newTitle="$newTitle" -v lineNum="$lineNum" 'NR==lineNum{gsub(bookName, newTitle)}1' cutText.txt > temp2.txt
mv -f temp2.txt cutText.txt
else
echo "Error"
fi
我cutText.txt包含的內容。如果用戶想要將MARY IS A LITTLE LAMB
更改爲Mary is not a lamb
,他將輸入新標題,cutText.txt
將用Mary is not a lamb
替換原標題。
現在出現的一個問題是,如果用戶輸入「Mary是一隻小羊羔」作爲$newTitle
,則此作品代碼不起作用,因爲它確實考慮了這種情況。 它只會工作是用戶類型「瑪麗是一個小LAMB」。我開始意識到BEGIN{IGNORECASE=1}
是gawk-sepcific,因此它不能在awk中使用。
如何更好地編寫腳本以便我可以忽略用戶輸入中的情況?謝謝!
你大概意思_A出現的問題是,如果用戶輸入「瑪麗是隻小羊羔」爲$ bookName_。無論如何,這只是一個awk唯一的問題。你應該刪除'bash'和'shell'標籤。你應該簡化你的問題,如_如何告訴一個非GNU awk忽略模式中的大小寫_ _,以及你想要什麼樣的行爲和你想要的行爲的一個小例子。指出你使用的是什麼版本的'awk'將是一個加號。 –
好的,謝謝你的提示!我仍然對編碼不熟悉>< – JamesPoppycock
讓我們先讓它工作健壯,然後再擔心「稍後閱讀」;-)。您當前的代碼在書名或作者姓名中的部分匹配,regexp元字符,轉義字符,反向引用,冒號等方面會以各種方式失敗,並且如果awk腳本中發生錯誤,將會擦除數據庫。 –