我們需要從命令輸出中提取該列。我嘗試過使用 awk 和 cut 命令的方法。而我們在第二列值中有空格,因為空格或其他字元的分隔符號無法以正確的方式解析第二列輸出。我們是否有另一種方法來獲取如上所述的純粹輸出的第二列?
# 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
正如上面第二列的輸出一樣,我們沒有原始文件中的完整值。
答案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