Получение столбца определенной строки в bash

У меня есть эта команда:

id=$(xl list|egrep $Name| tr -s ' ' | cut -d ' ' -f 2)

который xl list выведите что-то вроде этого:

Name                                        ID   Mem VCPUs  State   Time(s)
Domain-0                                     0  5923     8     r-----    4266.0
new_redhat9-clone                            3  1027     1     r-----    1019.6
new_redhat9                                  4  1027     1     -b----      40.1

На самом деле я хочу получить ID данного Name, Это работает когда Name=new_redhat9-clone (возвращается 3) но не работает когда Name=new_redhat9 (возвращается: 3 4!!!!). что случилось?!!!

2 ответа

Решение

grep ищет соответствие строковому образцу. egrep new_redhat9 совпадает с "new_redhat9" и "new_redhat9-clone". Попробуйте добавить пробел (или \t) после шаблона, переписать так

id=$(xl list|egrep 'new_redhat9 '| tr -s ' ' | cut -d ' ' -f 2)

Вы могли бы использовать awk вместо egrep,tr and cut команды,

id=$(xl list | awk '$1=="new_redhat9" {print $2}')

Команда Awk ищет точную строку new_redhat9 в первом столбце xl list выход. Если он найдет что-то, то значение column2 в соответствующей записи сохраняется в переменной id,

Вы можете проверить вывод через echo $id команда.

Если имя хранится в переменной, попробуйте команду ниже

id=$(xl list | awk -v var=$Name '$1==var {print $2}')
Другие вопросы по тегам