Bagaimana menghapus kolom atau banyak kolom dari file menggunakan perintah shell?

14

File saya,

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                                              

Keluaran,

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

Saya ingin menghapus dua kolom INFO_NAMdan WERTdari file input saya.

pmaipmui
sumber
Dua kolom mana yang benar-benar ingin Anda hapus. Output Anda telah INFO_NAM& PROCIDdihapus
neuron
awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tdapat memformatnya dengan baik.
cuonglm

Jawaban:

28

Jangan cetak kolom ke- 6 dan ke -8

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

Ini telah dijawab sebelumnya di tempat lain di Stack Overflow.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -atau-dari-perintah-line-on-linux dll.

Saya percaya awkadalah yang terbaik untuk itu.

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

Dimungkinkan untuk digunakan cutjuga.

cut -f1,2,3,4,5,7 file
AndreiR
sumber
3
Berikan contoh untuk cut, atau tidak menyebutkannya?
Drav Sloan
7
hanya untuk menyebutkannya: --complementopsi untuk cutmungkin berguna di sini, yaitu menghapus dua bidang daripada memilih enam:cut -f6,8 --complement file
Fiximan
awk bekerja ...... tapi apa yang terjadi ... formatnya diubah .... hanya mengambil bidang tetapi bukan struktur yang tepat ... dan memotong tidak bekerja ... @AndreiR
pmaipmui
Saya sudah mencoba ini cut –c1-45,55-58,. Tetapi sebelum menjalankan ini saya harus menghitung total karakter maka hanya saya yang bisa menggunakan ini. Tapi saya ingin mencetak kolom dengan format input yang sama
pmaipmui
@Nainita mungkin Anda memiliki pemisah berbeda yang bukan ruang. Dalam awk Anda harus menentukannya (yaitu menggunakan -F "\ t" jika tabular). Menggunakan cut, perlu menggunakan -d (cut -d, jika menggunakan koma).
AndreiR
2

Gunakan printfuntuk mempertahankan format masing-masing bidang. Setiap bidang panjang x karakter dan tanda minus membenarkan string yang tersisa.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
fd0
sumber