2017-02-06 11 views
-2

Использование ниже простых команд grep & AWK для соответствия имени хоста и идентификатора печати из файла CSV.Команда grep и AWK для чтения имени хоста и столбцов печати

Моя команда:

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

Мой CSV Inventory:

Hostname     App_ID  
SercverTest345    12    
Mytestserver01    17    
Mytestserver02    19 

Если CMD ищет Mytestserver02 он печатает APP_ID 17 & 19, но на самом деле он должен печатать только 19 в соответствии с именем хоста

Пожалуйста, помогите мне решить эту проблему.

+1

Почему вы писали 'awk -F,' если ваш файл csv не имеет запятой? – Aserre

+1

Что-то вроде 'awk -v host =" Mytestserver01 "'$ 1 == host {print $ 2}'/tmp/MasterInventory.csv' должно работать для вашего случая кстати, но я думаю, что есть много дубликатов для вашего вопроса. – Aserre

+0

Ваше решение будет соответствовать только имени узла _exact_. Его использование grep, кажется, указывает, что он хочет частичных матчей. Поэтому: 'awk -v host =" Mytestserver01 "'$ 1 ~ host {print $ 2}'/tmp/MasterInventory.csv' – cfromme

ответ

1

Edited после комментариев:

Вот чистый 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 

Advantage чистого awk по раствору с grep является вы сопоставляете только первый столбец, а не всю строку. Плюс, если вы используете == вместо ~, вы можете убедиться, что получаете только точные совпадения имен хостов.

+0

Вам не нужно для экспорта переменной, поскольку вы используете grep внутри одного и того же сценария bash. – Aserre

+0

Argh, вы правы. Стрелял слишком быстро. ;) – cfromme

+0

Вам никогда не понадобится grep, когда вы используете awk, так как awk может делать все, что может сделать grep. –