¿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.


¿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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.