Làm cách nào để xóa một cột hoặc nhiều cột khỏi tệp bằng lệnh shell?


14

Tập tin của tôi,

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                                              

Đầu ra,

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

Tôi muốn xóa hai cột INFO_NAMWERTtừ tập tin đầu vào của tôi.


Mà hai cột bạn thực sự muốn được loại bỏ. Đầu ra của bạn đã INFO_NAM& PROCIDxóa
nơ ron

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tcó thể định dạng độc đáo.
cuonglm

Câu trả lời:


28

Không in 6 tháng và 8 thứ cột

awk '{$6=$8=""; print $0}' file

16

Điều này đã được trả lời trước khi ở nơi khác trên Stack Overflow.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -hoặc-từ-lệnh-line-on-linux, v.v.

Tôi tin awklà tốt nhất cho điều đó.

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

Có thể sử dụng cutlà tốt.

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

3
Cho một ví dụ cho cut, hoặc không đề cập đến nó?
Drav Sloan

7
chỉ cần đề cập đến nó: --complementtùy chọn cutcó thể có ích ở đây, tức là xóa hai trường thay vì chọn sáu:cut -f6,8 --complement file
Fiximan

awk đang hoạt động ...... nhưng những gì đang xảy ra ... định dạng đã thay đổi .... nó chỉ lấy trường nhưng không có cấu trúc chính xác ... và cắt không hoạt động ... @AndreiR
pmaipmui

Tôi đã thử điều này , cut –c1-45,55-58. Nhưng trước khi thực hiện điều này, tôi phải đếm tổng số ký tự thì chỉ tôi mới có thể làm điều này. Nhưng tôi muốn in các cột giống như định dạng đầu vào của mình
pmaipmui

@Nainita có thể bạn có dải phân cách khác không phải là không gian. Trong awk, bạn nên chỉ định nó (tức là sử dụng -F "\ t" nếu dạng bảng). Sử dụng cắt, cần sử dụng -d (cắt -d, nếu sử dụng dấu phẩy).
AndreiR

2

Sử dụng printfđể bảo tồn định dạng của từng lĩnh vực. Mỗi trường dài x ký tự và dấu trừ chỉ ra chuỗi còn lại.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.