Получение столбца определенной строки в 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}')