2015-07-21 26 views
0

我試圖編寫一個函數,在第二列中查找姓氏(來自用戶輸入)並將該行返回給用戶。這是我試過的(並且不工作)。最重要的是,當我在命令行中用姓氏替換$ input_name來運行它時,它可以工作。正如你所看到的,回聲確認用戶輸入已被正確讀取。我錯過了什麼?使用bash搜索第二列中的字符串

60 last_search() { 
61   echo "What last name are you looking for?" 
62   read input_name 
63   echo "$input_name" 
64   awk -F':' '$2 ~ /$input_name/{print $0}' temp_phonebook 
65 } 

回答

-1

您的awk命令在單個ticks中,所以$input_name永遠不會被展開。

嘗試是這樣的:

awk -F':' '$2 ~ /'"$input_name"'/{print $0}' temp_phonebook 

或者,在事先提供的價值使用-v name=value

awk -F':' -v search="${input_name}" '$2 ~ search {print $0}' temp_phonebook 
+0

當輸入名稱爲「駱駝',在詞語之間留有空格。至少,在雙引號中加上'「$ input_name」'。 –

+0

所以我應該使用 –

+0

所以我應該使用雙引號?我得到:awk:在源代碼行1的語法錯誤 上下文是 \t >>>〜<<< awk:在源代碼行1救援 –

3
  1. 使用-v name=value通過一個shell變量在awk
  2. shell變量韓元不會在單引號中展開
  3. print $0是默認操作,因此請將其取出。

您可以使用:

awk -F: -v input_name="$input_name" '$2 ~ input_name' temp_phonebook 
+1

這是將shell變量的值傳遞給awk腳本的正確方法,所以+'但是對於OP,您是否真的想要將$ 2包含input_name(例如$ 2 Johnson match input_name John?)的行打印爲上面的腳本會做什麼或者$ 2是否只是input_name?如果後者用'=='替換'〜'。 –

-1

沒關係,我理解了它!我需要單引號圍繞變量'$ input_name'

+1

1.這不是一個有效的答案,2.這是行不通的。 – anubhava

+0

這工作:69#功能以姓氏搜索記錄 70 last_search(){ 71回聲「你在找什麼姓氏? 72 read input_name 73 echo「$ input_name」 74#awk -F':''{print $ 0}'temp_phonebook 75#按姓氏搜索,顯示結果 76 awk -F':''$ 2〜/' $ input_name'/ {print $ 0}'temp_phonebook 77} –

+1

'awk -F':''$ 2〜/'$ input_name'/ {print $ 0}'temp_phonebook 77}'可能工作但不正確。詳情請參閱我的回答。 – anubhava