Score:0

แยกวิเคราะห์คอลัมน์จากเอาต์พุตคำสั่ง bash อย่างหมดจด

ธง ng

เราจำเป็นต้องแยกคอลัมน์ออกจากเอาต์พุตคำสั่ง ฉันได้ลองใช้วิธีการโดยใช้ awk และคำสั่งตัด ในขณะที่เรามีช่องว่างในค่าคอลัมน์ที่ 2 เนื่องจากตัวคั่นสำหรับช่องว่างหรืออักขระอื่นไม่ได้แยกวิเคราะห์เอาต์พุตคอลัมน์ที่ 2 ด้วยวิธีที่ถูกต้อง เรามีวิธีอื่นในการรับเฉพาะคอลัมน์ที่สองของผลลัพธ์ตามที่กล่าวไว้ข้างต้นหรือไม่?

# ข้อมูลแมว.txt
ไฟล์ชื่อ Vmid                                 
369 DO-NOT-DELL [datastore1] DO-NOT-DELL/DO-NOT-DELL.vmx                                
389 เซิร์ฟเวอร์ VMware vCenter [datastore1] เซิร์ฟเวอร์ VMware vCenter/VMware vCenter Server.vmx            
390 Auth-vcenter-อย่าลบ [datastore1] Auth-vcenter-อย่าลบ/Auth-vcenter-อย่า delete.vmx    
393 VirtualMachine [datastore1] VirtualMachine/VirtualMachine.vmx                                            
9 Server 2005 สำหรับ VM (ทีม dev) [datastore1] Server 2005 สำหรับ VM (ทีม dev)      

# ข้อมูลแมว.txt | awk '{พิมพ์ $2}'
ห้าม DELL
วีเอ็มแวร์
Auth-vcenter-อย่า
VirtualMachine
เซิร์ฟเวอร์

เช่นเดียวกับผลลัพธ์ข้างต้นของคอลัมน์ที่ 2 เราไม่มีค่าสมบูรณ์เหมือนในไฟล์ต้นฉบับ

Score:4
ธง us

เป็นไปได้ที่จะแยกวิเคราะห์ คอลัมน์ความกว้างคงที่ด้วย GNU awk:

การแยกบันทึกอินพุตลงในฟิลด์ความกว้างคงที่ระบุโดยการกำหนดสตริงที่มีตัวเลขคั่นด้วยช่องว่างให้กับตัวแปรในตัว ฟิลด์ความกว้าง. ตัวเลขแต่ละตัวระบุความกว้างของฟิลด์ รวมทั้งคอลัมน์ระหว่างฟิลด์ ถ้าคุณต้องการละเว้นคอลัมน์ระหว่างฟิลด์ คุณสามารถระบุความกว้างเป็นฟิลด์แยกต่างหากที่จะถูกละเว้นในภายหลัง

% awk -v FIELDWIDTHS="7 37 *" '{พิมพ์ $2}' ฟู
   ชื่อ                              
ห้าม DELL                          
เซิร์ฟเวอร์ VMware vCenter                
Auth-vcenter-อย่าลบ            
VirtualMachine                       
Server 2005 สำหรับ VM (ทีมพัฒนา)        

คุณยังสามารถใช้นิพจน์ทั่วไปเป็นตัวคั่นฟิลด์เพื่อแยกข้อความได้ เช่น ใช้ช่องว่าง 3 ช่องขึ้นไปเป็น FS:

% awk -F ' {3,}' '{พิมพ์ $2}' foo
ชื่อ
ห้าม DELL
เซิร์ฟเวอร์ VMware vCenter
Auth-vcenter-อย่าลบ
VirtualMachine
Server 2005 สำหรับ VM (ทีมพัฒนา)
cybermizz avatar
ng flag
ขอบคุณมากครับ @muru
bac0n avatar
cn flag
`'NR>1 {พิมพ์ $2}'` ข้ามส่วนหัว
Score:1
ธง cn

แปลงช่องว่างเป็นแท็บที่มีตำแหน่งหยุดแท็บที่ไม่ใช่ค่าเริ่มต้น:

unexpand -t 7,44 info.txt | ตัด -f2
elmclose avatar
cn flag
โซลูชั่นที่ยอดเยี่ยม ฉันได้เรียนรู้สิ่งใหม่: unexpand
Score:1
ธง ng

ฉันยังพบแนวทางที่ดีจากเพื่อนคนหนึ่งของฉันในการรับรายชื่อเครื่องเสมือน

# ข้อมูลแมว.txt | tr -s " " | ตัด -d "[" -f1 | ตัด -d " " -f2- | หาง -n +2

                        
ห้าม DELL                          
เซิร์ฟเวอร์ VMware vCenter                
Auth-vcenter-อย่าลบ            
VirtualMachine                       
Server 2005 สำหรับ VM (ทีมพัฒนา)  
Score:0
ธง cn

สามารถใช้ช่องว่างหลายช่องระหว่าง 'คอลัมน์' เป็นตัวคั่นฟิลด์ awk สามารถทำได้โดย regex เป็น [ ]{2,}

$ awk -F"[ ]{2,}" '{พิมพ์ $1}'
วมิด
369
389
390
393
9

$ awk -F"[ ]{2,}" '{พิมพ์ $2}'
ชื่อ
ห้าม DELL
เซิร์ฟเวอร์ VMware vCenter
Auth-vcenter-อย่าลบ
VirtualMachine
Server 2005 สำหรับ VM (ทีมพัฒนา)

$ awk -F"[ ]{2,}" '{พิมพ์ $3}'
ไฟล์
[datastore1] DO-NOT-DELL/DO-NOT-DELL.vmx
[datastore1] เซิร์ฟเวอร์ VMware vCenter/VMware vCenter Server.vmx
[datastore1] Auth-vcenter-อย่าลบ/Auth-vcenter-อย่า delete.vmx
[datastore1] VirtualMachine/VirtualMachine.vmx
[datastore1] Server 2005 สำหรับ VM (ทีมพัฒนา)
terdon avatar
cn flag
`rev info.txt | ของคุณ awk '{$NF=""; พิมพ์ $0}' | รอบ | sed 's/\[/SEP\[/g' | awk 'BEGIN{FS="SEP"} {print $1}'` จะพิมพ์ `Name File` เป็นบรรทัดแรก ดูเหมือนว่าคนอื่น ๆ จะสร้างสิ่งอื่นนอกเหนือจากที่ OP ขอ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา