Analysieren Sie die Spalte einfach aus der Ausgabe des Bash-Befehls

Analysieren Sie die Spalte einfach aus der Ausgabe des Bash-Befehls

Wir müssen die Spalte aus der Befehlsausgabe extrahieren. Ich habe die Methoden mit den Befehlen awk und cut ausprobiert. Dabei haben wir die Leerzeichen in den Werten der 2. Spalte, aufgrund derer das Trennzeichen für Leerzeichen oder andere Zeichen die Ausgabe der 2. Spalte nicht richtig analysiert. Gibt es eine andere Methode, um wie oben erwähnt nur die zweite Spalte der Ausgabe abzurufen?

# 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

Da wir in der obigen Ausgabe einer zweiten Spalte nicht den vollständigen Wert haben, wie er in der Originaldatei steht.

Antwort1

Es ist möglich zu analysierenSpalten mit fester Breite mit GNU awk:

Die Aufteilung eines Eingabedatensatzes in Felder mit fester Breite wird durch die Zuweisung einer Zeichenfolge mit durch Leerzeichen getrennten Zahlen an die integrierte Variable angegeben FIELDWIDTHS. Jede Zahl gibt die Breite des Felds an, einschließlich der Spalten zwischen den Feldern. Wenn Sie die Spalten zwischen den Feldern ignorieren möchten, können Sie die Breite als separates Feld angeben, das anschließend ignoriert wird.

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

Sie können auch einen regulären Ausdruck als Feldtrennzeichen verwenden, um den Text aufzuteilen, also beispielsweise 3 oder mehr Leerzeichen als Feldtrennzeichen:

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

Antwort2

Ich habe bei einem Freund auch einen guten Ansatz gefunden, um die Liste der virtuellen Maschinen zu erhalten.

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

Antwort3

Leerzeichen in Tabulatoren mit nicht standardmäßigen Tabstopppositionen umwandeln:

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

verwandte Informationen