bash 명령 출력의 열을 순수하게 구문 분석합니다.

bash 명령 출력의 열을 순수하게 구문 분석합니다.

명령 출력에서 ​​열을 추출해야 합니다. 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)        

정규식을 필드 구분 기호로 사용하여 텍스트를 분할할 수도 있습니다. 예를 들어 FS로 3개 이상의 공백을 사용할 수 있습니다.

% 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

관련 정보