Come rimuovere una o più colonne dal file usando il comando shell?


14

Il mio file,

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                                              

Produzione,

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

Voglio eliminare due colonne INFO_NAMe WERTdal mio file di input.


Quali due colonne vuoi veramente essere rimosse. L'output è INFO_NAMe PROCIDcancellato
neurone

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tpuò formattarlo bene.
cuonglm,

Risposte:


28

Non stampare la sesta e l' ottava colonna

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

16

È stato risposto prima altrove su StackTranslate.it.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -o-da-riga-di-comando-su-linux ecc.

Credo awksia il migliore per quello.

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

È anche possibile usare cut.

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

3
Fai un esempio per cut, o non menzionarlo?
Drav Sloan,

7
solo per menzionarlo: l' --complementopzione per cutpotrebbe essere utile qui, vale a dire rimuovere due campi anziché selezionarne sei:cut -f6,8 --complement file
Fiximan

awk sta funzionando ...... ma cosa sta succedendo ... il formato è cambiato .... sta solo scendendo in campo ma non la struttura esatta ... e il taglio non funziona ... @AndreiR
pmaipmui

Ho provato questo, cut –c1-45,55-58. Ma prima di eseguire questo devo contare i caratteri totali, solo io posso farlo. Ma volevo stampare le colonne con lo stesso del mio formato di input
pmaipmui,

@Nainita forse hai un separatore diverso che non è spazio. In awk dovresti specificarlo (cioè usando -F "\ t" se tabulare). Usando cut, è necessario usare -d (cut -d, se si usa la virgola).
Andrej

2

Utilizzare printfper preservare il formato di ciascun campo. Ogni campo è lungo x caratteri e il segno meno giustifica la stringa rimasta.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.