¿Cómo eliminar una columna o varias columnas del archivo usando el comando de shell?

14

Mi archivo,

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                                              

Salida,

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

Quiero eliminar dos columnas INFO_NAMy WERTde mi archivo de entrada.

pmaipmui
fuente
¿Qué dos columnas realmente quieres que se eliminen? Su salida ha INFO_NAM& PROCIDeliminado
neurona
awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tpuede formatearlo bien.
Cuonglm

Respuestas:

28

No imprima 6 º y 8 º columna

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

Esto ha sido respondido antes en otra parte en Stack Overflow.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -o-desde-línea-de-comando-en-linux etc.

Creo que awkes lo mejor para eso.

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

Es posible usar cuttambién.

cut -f1,2,3,4,5,7 file
AndreiR
fuente
3
¿Dar un ejemplo cuto no mencionarlo?
Drav Sloan el
77
solo por mencionarlo: la --complementopción para cutpodría ser útil aquí, es decir, eliminar dos campos en lugar de seleccionar seis:cut -f6,8 --complement file
Fiximan
awk está funcionando ... pero lo que está sucediendo ... el formato ha cambiado ... solo toma el campo pero no la estructura exacta ... y el corte no funciona ... @AndreiR
pmaipmui
He intentado esto, cut –c1-45,55-58. Pero antes de ejecutar esto, tengo que contar el total de caracteres, entonces solo nosotros podemos hacerlo. Pero quería imprimir las columnas con el mismo formato de entrada
pmaipmui del
@Nainita quizás tengas un separador diferente que no sea espacio. En awk debe especificarlo (es decir, usando -F "\ t" si es tabular). Usando cut, es necesario usar -d (cut -d, si usa una coma).
AndreiR
2

Use printfpara preservar el formato de cada campo. Cada campo tiene una longitud de x caracteres y el signo menos justifica la cadena que queda.

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