Analice puramente la columna de la salida del comando bash

Analice puramente la columna de la salida del comando bash

Necesitamos extraer la columna de la salida del comando. Probé los métodos usando awk y los comandos de corte. Mientras que tenemos espacios en los valores de la segunda columna debido a que el delimitador de espacio u otro carácter no analiza la salida de la segunda columna de manera correcta. ¿Tenemos otro método para obtener únicamente la segunda columna del resultado como se mencionó anteriormente?

# 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

Como en el resultado anterior de una segunda columna, no tenemos el valor completo como en el archivo original.

Respuesta1

Es posible analizarcolumnas de ancho fijo con GNU awk:

La división de un registro de entrada en campos de ancho fijo se especifica asignando una cadena que contiene números separados por espacios a la variable incorporada FIELDWIDTHS. Cada número especifica el ancho del campo, incluidas las columnas entre campos. Si desea ignorar las columnas entre campos, puede especificar el ancho como un campo separado que se ignora posteriormente.

% 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)        

También puede usar una expresión regular como separador de campos para dividir el texto, por ejemplo, usando 3 o más espacios como 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)

Respuesta2

También encontré un buen enfoque de uno de mis amigos para obtener la lista de máquinas virtuales.

# 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)  

Respuesta3

Convierta espacios en tabulaciones con posiciones de tabulación no predeterminadas:

unexpand -t 7,44 info.txt | cut -f2

información relacionada