Điểm:0

Hoàn toàn phân tích cú pháp cột từ đầu ra lệnh bash

lá cờ ng

Chúng ta cần trích xuất cột từ đầu ra lệnh. Tôi đã thử các phương pháp sử dụng awk và các lệnh cắt. Trong khi chúng tôi có các khoảng trắng trong các giá trị của cột thứ 2 do dấu phân cách cho khoảng trắng hoặc ký tự khác không phân tích cú pháp đầu ra của cột thứ 2 theo cách chính xác. Chúng ta có phương pháp nào khác để lấy hoàn toàn cột thứ hai của đầu ra như đã đề cập ở trên không?

# cat info.txt
Tệp tên Vmid                                 
369 DO-KHÔNG-DELL [datastore1] KHÔNG-DELL/KHÔNG-DELL.vmx                                
389 Máy chủ VMware vCenter [datastore1] Máy chủ VMware vCenter/VMware vCenter Server.vmx            
390 Auth-vcenter-Không xóa [datastore1] Auth-vcenter-Không xóa/Auth-vcenter-Không xóa.vmx    
393 VirtualMachine [datastore1] VirtualMachine/VirtualMachine.vmx                                            
9 Server 2005 cho VM (nhóm nhà phát triển) [datastore1] Server 2005 cho VM (nhóm nhà phát triển)      

# mèo info.txt | awk '{in $2}'
KHÔNG-DELL
VMware
Auth-vcenter-Không
Máy ảo
Người phục vụ

Như trong đầu ra ở trên của cột thứ 2, chúng tôi không có giá trị đầy đủ như trong tệp gốc.

Điểm:4
lá cờ us

Có thể phân tích cú pháp cột có chiều rộng cố định với GNU awk:

Việc phân tách bản ghi đầu vào thành các trường có độ rộng cố định được chỉ định bằng cách gán một chuỗi chứa các số được phân tách bằng dấu cách cho biến tích hợp CHIỀU RỘNG LĨNH VỰC. Mỗi số chỉ định chiều rộng của trường, bao gồm các cột giữa các trường. Nếu bạn muốn bỏ qua các cột giữa các trường, bạn có thể chỉ định chiều rộng dưới dạng một trường riêng biệt mà sau đó sẽ bị bỏ qua.

% awk -v FIELDWIDTHS="7 37 *" '{print $2}' foo
   Tên                              
KHÔNG-DELL                          
Máy chủ VMware vCenter                
Auth-vcenter-Không xóa            
Máy ảo                       
Máy chủ 2005 cho VM (nhóm nhà phát triển)        

Bạn cũng có thể sử dụng biểu thức chính quy làm dấu tách trường để phân tách văn bản, vì vậy, ví dụ: sử dụng 3 khoảng trắng trở lên làm FS:

% awk -F ' {3,}' '{print $2}' foo
Tên
KHÔNG-DELL
Máy chủ VMware vCenter
Auth-vcenter-Không xóa
Máy ảo
Máy chủ 2005 cho VM (nhóm nhà phát triển)
cybermizz avatar
lá cờ ng
Cảm ơn bạn rất nhiều @muru
bac0n avatar
lá cờ cn
`'NR>1 {print $2}'`, bỏ qua tiêu đề.
Điểm:1
lá cờ ng

Tôi cũng đã tìm thấy một cách tiếp cận tốt từ một người bạn của mình để lấy danh sách các máy ảo.

# mèo info.txt | tr -s " " | cắt -d "[" -f1 | cắt -d " " -f2- | đuôi -n +2

                        
KHÔNG-DELL                          
Máy chủ VMware vCenter                
Auth-vcenter-Không xóa            
Máy ảo                       
Máy chủ 2005 cho VM (nhóm nhà phát triển)  
Điểm:1
lá cờ cn

Chuyển đổi khoảng trắng thành các tab có vị trí dừng tab không mặc định:

mở rộng -t 7,44 info.txt | cắt -f2
elmclose avatar
lá cờ cn
Giải pháp tuyệt vời. Tôi đã học được điều gì đó mới : unexpand
Điểm:0
lá cờ cn

Nhiều khoảng trắng giữa các 'cột' có thể được sử dụng làm dấu tách trường awk. Điều này có thể được thực hiện bởi regex như [ ]{2,}

$ awk -F"[ ]{2,}" '{in $1}'
Vmid
369
389
390
393
9

$ awk -F"[ ]{2,}" '{in $2}'
Tên
KHÔNG-DELL
Máy chủ VMware vCenter
Auth-vcenter-Không xóa
Máy ảo
Máy chủ 2005 cho VM (nhóm nhà phát triển)

$ awk -F"[ ]{2,}" '{in $3}'
Tập tin
[datastore1] DO-KHÔNG-DELL/KHÔNG-KHÔNG-DELL.vmx
[datastore1] VMware vCenter Server/VMware vCenter Server.vmx
[datastore1] Auth-vcenter-Không xóa/Auth-vcenter-Không xóa.vmx
[datastore1] VirtualMachine/VirtualMachine.vmx
[datastore1] Server 2005 cho VM (nhóm nhà phát triển)
terdon avatar
lá cờ cn
`rev info.txt | awk '{$NF=""; in $0}' | vòng quay | sed 's/\[/SEP\[/g' | awk 'BEGIN{FS="SEP"} {print $1}'` sẽ in `Name File` ở dòng đầu tiên. Những người khác dường như đang sản xuất thứ gì đó khác với những gì OP yêu cầu.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.