Analise puramente a coluna da saída do comando bash

Analise puramente a coluna da saída do comando bash

Precisamos extrair a coluna da saída do comando. Eu tentei os métodos usando os comandos awk e cut. Considerando que temos espaços nos valores da 2ª coluna devido ao qual o delimitador de espaço ou outro caractere não analisa a saída da 2ª coluna de maneira correta. Temos outro método para obter puramente a segunda coluna da saída conforme mencionado acima?

# 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 na saída acima de uma 2ª coluna, não temos o valor completo como no arquivo original.

Responder1

É possível analisarcolunas de largura fixa com GNU awk:

A divisão de um registro de entrada em campos de largura fixa é especificada atribuindo uma string contendo números separados por espaços à variável integrada FIELDWIDTHS. Cada número especifica a largura do campo, incluindo colunas entre os campos. Se quiser ignorar as colunas entre os campos, você poderá especificar a largura como um campo separado que será posteriormente ignorado.

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

Você também pode usar uma expressão regular como separador de campo para dividir o texto, por exemplo, usando 3 ou mais espaços 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)

Responder2

Também encontrei uma boa abordagem de um amigo para obter a lista das máquinas virtuais.

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

Responder3

Converta espaços em tabulações com posições de tabulação não padrão:

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

informação relacionada