2017-02-06 80 views
-2

現在用下面簡單的grep & AWK命令從CSV文件匹配的主機名和打印ID。grep和awk命令來讀取主機名和打印列

我的命令:

#!/bin/bash 
host=`hostname` 
/bin/cat /tmp/MasterInventory.csv | grep -i $host | awk -F, '{print $1}' > /opt/input_appProfile.id 

我的CSV庫存:

Hostname     App_ID  
SercverTest345    12    
Mytestserver01    17    
Mytestserver02    19 

如果CMD搜索Mytestserver02正在打印APP_ID 17 & 19,但實際上它應該只19打印爲每個主機名

請幫我解決這個問題。

+1

爲什麼你寫的'awk的-F,'如果您的CSV文件沒有逗號? – Aserre

+1

像'AWK -v主機=「Mytestserver01」「$ 1 == {主機打印$ 2}」的/ tmp/MasterInventory.csv'應該爲你的工作的情況下順便說一句,但我覺得有你的問題很多重複。 – Aserre

+0

您的解決方案只會匹配_exact_主機名稱。他對grep的使用似乎表明他也想要部分匹配。因此:'AWK -v主機= 「Mytestserver01」 '$ 1〜主機{打印$ 2}' 的/ tmp/MasterInventory.csv' – cfromme

回答

1

意見後編輯:

這裏是一個純awk解決方案:

awk -v host="$(hostname)" 'tolower($1)~tolower(host){print $2}' /tmp/MasterInventory.csv > /opt/input_appProfile.id 

這裏是萬一使用grep一個解決方案,你喜歡什麼:

grep -i `hostname` /tmp/MasterInventory.csv | awk '{print $1}' > /opt/input_appProfile.id 

優勢與grep相比,純awk的解決方案是你只匹配第一列而不是整行。此外,如果您使用==而不是~,則可以確保只獲取確切的主機名匹配。

+0

您不需要導出變量,因爲你在同一個bash腳本中使用grep – Aserre

+0

Argh,你說得對。射速太快。 ;) – cfromme

+0

當你使用awk時,你從不需要grep,因爲awk可以做grep可以做的任何有用的事情。 –