Нам нужно извлечь столбец из вывода команды. Я пробовал методы с использованием команд awk и cut. В то время как у нас есть пробелы в значениях 2-го столбца, из-за которых разделитель для пробела или другого символа не анализирует вывод 2-го столбца правильным образом. Есть ли у нас другой метод, чтобы получить чисто второй столбец вывода, как указано выше?
# cat info.txt
Vmid Name File
369 DO-NOT-DELL [datastore1] DO-NOT-DELL/DO-NOT-DELL.vmx
389 VMware vCenter Server [datastore1] VMware vCenter Server/VMware vCenter Server.vmx
390 Auth-vcenter-Don't delete [datastore1] Auth-vcenter-Don't delete/Auth-vcenter-Don't delete.vmx
393 VirtualMachine [datastore1] VirtualMachine/VirtualMachine.vmx
9 Server 2005 for VM (dev team) [datastore1] Server 2005 for VM (dev team)
# cat info.txt | awk '{print $2}'
DO-NOT-DELL
VMware
Auth-vcenter-Don't
VirtualMachine
Server
Как и в приведенном выше выводе 2-го столбца, у нас нет полного значения, как в исходном файле.
решение1
Можно разобратьстолбцы фиксированной ширины с GNU awk:
Разделение входной записи на поля фиксированной ширины задается путем присвоения строки, содержащей разделенные пробелами числа, встроенной переменной
FIELDWIDTHS
. Каждое число определяет ширину поля, включая столбцы между полями. Если вы хотите игнорировать столбцы между полями, вы можете указать ширину как отдельное поле, которое впоследствии игнорируется.
% awk -v FIELDWIDTHS="7 37 *" '{print $2}' foo
Name
DO-NOT-DELL
VMware vCenter Server
Auth-vcenter-Don't delete
VirtualMachine
Server 2005 for VM (dev team)
Вы также можете использовать регулярное выражение в качестве разделителя полей для разделения текста, например, используя 3 или более пробелов в качестве FS:
% awk -F ' {3,}' '{print $2}' foo
Name
DO-NOT-DELL
VMware vCenter Server
Auth-vcenter-Don't delete
VirtualMachine
Server 2005 for VM (dev team)
решение2
Я также нашел хороший подход от одного моего друга, как получить список виртуальных машин.
# cat info.txt | tr -s " " | cut -d "[" -f1 | cut -d " " -f2- | tail -n +2
DO-NOT-DELL
VMware vCenter Server
Auth-vcenter-Don't delete
VirtualMachine
Server 2005 for VM (dev team)
решение3
Преобразовать пробелы в табуляции с нестандартными позициями табуляции:
unexpand -t 7,44 info.txt | cut -f2