2013-11-26 61 views
0

我在bash中有以下數據文件。我想搜索用戶輸入的網絡服務器是否存在於數據文件中,如果存在,它應該返回階段和受管理的服務器名稱。在bash文件中查找列表中的確切名稱

1 K1 tvtw1 tvtm1 
1 K1 tvtw2 tvtw2 
2 K2 tvtw26 tvtw26 
3 k5 tvtw29 tvtm29 

我試過grep "$webserver" serverList.lst | awk '{print $1}',但它爲tvtw2返回多個值。有沒有辦法從列表中找到確切的服務器名稱?

回答

0

如果我理解正確的話,如果第3列完全匹配,那麼你想獲得第1列的值:

awk -v serv=tvtw2 '$3 == serv {print $1}' serverList.lst 

也就是說,我們把你想在可變serv相匹配的字符串,然後使用它作爲awk中的過濾器表達式來精確匹配第3列。

0

您需要在您的grep正則表達式中添加字邊界,以便不會選擇tvtw26

例如grep '\btvtw2\b' file ...

但是既然您已經使用了awk,那麼您可以考慮對所有人使用awk。 @janos的回答顯示了它是如何做到的。

0

嘗試grep -w-w代表字正則表達式)

然而,grep | awkuseless-use-of-grep。查看janos的答案以獲得更優化的解決方案。