จะลบคอลัมน์หรือหลายคอลัมน์ออกจากไฟล์โดยใช้คำสั่ง shell ได้อย่างไร


14

ไฟล์ของฉัน

ARCHIVE  B1_NAME  B2_NAME  B3_NAME  ELEMENT  INFO_NAM WERT PROCID                                               
-------- -------- -------- -------- -------- -------- ---- ------                                              
15MinAvg AIRSS    33-GIS   DMDMGIS1 I        MvAvr15m 1123  CP                                               
15MinAvg AIRSS    33-GIS   DMDMGIS1 P        MvAvr15m 2344  CP                                               
15MinAvg AIRSS    33-GIS   DMDMGIS1 Q        MvAvr15m 4545  CP                                               
15MinAvg AIRSS    33-GIS   DMDMGIS2 I        MvAvr15m 6576  CP                                              
15MinAvg AIRSS    33-GIS   DMDMGIS2 P        MvAvr15m 4355  CP                                             
15MinAvg AIRSS    33-GIS   DMDMGIS2 Q        MvAvr15m 6664  CP                                              

เอาท์พุท

ARCHIVE  B1_NAME  B2_NAME  B3_NAME  ELEMENT WERT                                                
-------- -------- -------- -------- ------- ----                                              
15MinAvg AIRSS    33-GIS   DMDMGIS1 I       1123                                                    
15MinAvg AIRSS    33-GIS   DMDMGIS1 P       2344                                                      
15MinAvg AIRSS    33-GIS   DMDMGIS1 Q       4545                                                      
15MinAvg AIRSS    33-GIS   DMDMGIS2 I       6576                                                      
15MinAvg AIRSS    33-GIS   DMDMGIS2 P       4355
15MinAvg AIRSS    33-GIS   DMDMGIS2 Q       6664

ฉันต้องการลบสองคอลัมน์INFO_NAMและWERTจากไฟล์อินพุตของฉัน


คุณต้องการลบคอลัมน์สองคอลัมน์ไหน การส่งออกของคุณINFO_NAMและPROCIDลบ
เซลล์ประสาท

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tสามารถจัดรูปแบบมันอย่างสวยงาม
cuonglm

คำตอบ:



16

มีการตอบคำถามนี้ก่อนหน้านี้ที่อื่นในสแต็คโอเวอร์โฟลว์

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk หรือจากบรรทัดคำสั่ง -on-linux เป็นต้น

ฉันเชื่อว่าawkเป็นสิ่งที่ดีที่สุดสำหรับสิ่งนั้น

awk '{print $1,$2,$3,$4,$5,$7}' file

มันเป็นไปได้ที่จะใช้cutเช่นกัน

cut -f1,2,3,4,5,7 file

3
ยกตัวอย่างสำหรับcutหรือไม่พูดถึงมันได้หรือไม่
Drav Sloan

7
เพียงพูดถึงมัน: --complementตัวเลือกสำหรับcutอาจจะมีประโยชน์ในที่นี่คือการลบสองเขตข้อมูลมากกว่าที่จะเลือกหก:cut -f6,8 --complement file
Fiximan

awk กำลังทำงาน ...... แต่เกิดอะไรขึ้น ... รูปแบบมีการเปลี่ยนแปลง .... มันเพิ่งจะลงสนาม แต่ไม่ใช่โครงสร้างที่แน่นอน ... และการตัดไม่ทำงาน ... @AndreiR
pmaipmui

ฉันได้ลองสิ่งนี้แล้ว, cut –c1-45,55-58. แต่ก่อนที่จะดำเนินการสิ่งนี้ฉันต้องนับจำนวนตัวอักษรทั้งหมดแล้วมีเพียงฉันเท่านั้นที่ทำได้ แต่ฉันต้องการพิมพ์คอลัมน์ด้วยรูปแบบอินพุตของฉัน
pmaipmui

@Nainita บางทีคุณอาจมีตัวคั่นที่แตกต่างกันซึ่งไม่ใช่ที่ว่าง ใน awk คุณควรระบุ (เช่นใช้ -F "\ t" ถ้าตาราง) การใช้การตัดจำเป็นต้องใช้ -d (cut -d หากใช้เครื่องหมายจุลภาค)
AndreiR

2

ใช้printfเพื่อรักษารูปแบบของแต่ละฟิลด์ แต่ละฟิลด์มีความยาวอักขระ x และเครื่องหมายลบจะแสดงสตริงที่เหลือ

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.