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