Como remover uma coluna ou várias colunas do arquivo usando o comando shell?


14

Meu arquivo,

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                                              

Resultado,

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

Eu quero excluir duas colunas INFO_NAMe WERTdo meu arquivo de entrada.


Quais são as duas colunas que você realmente deseja remover? Sua saída foi INFO_NAMe PROCIDexcluídos
neurônio

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tpode formatá-lo bem.
precisa saber é

Respostas:


28

Não imprima 6 ª e 8 ª coluna

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

16

Isso já foi respondido antes em outro lugar no Stack Overflow.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -ou-a partir da linha de comando no linux etc.

Eu acredito que awké o melhor para isso.

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

É possível usar cuttambém.

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

3
Dê um exemplo cutou não mencione isso?
Drav Sloan

7
só para mencionar: a --complementopção para cutpode ser útil aqui, ou seja, a remoção de dois campos em vez de selecionar seis:cut -f6,8 --complement file
Fiximan

o awk está funcionando ...... mas o que está acontecendo ... o formato é alterado ... está apenas entrando em campo, mas não a estrutura exata ... e o corte não está funcionando ... @AndreiR
pmaipmui

Eu tentei isso cut –c1-45,55-58. Mas antes de executar isso, tenho que contar o total de caracteres, apenas eu posso isso. Mas eu queria imprimir as colunas com o mesmo que o meu formato de entrada
pmaipmui

@ Nainita, talvez você tenha um separador diferente que não seja espaço. No awk, você deve especificá-lo (por exemplo, usando -F "\ t" se for tabular). Usando cut, é necessário usar -d (cut -d, se estiver usando vírgula).
AndreiR

2

Use printfpara preservar o formato de cada campo. Cada campo tem x caracteres e o sinal de menos justifica a sequência restante.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.