Comment supprimer une colonne ou plusieurs colonnes du fichier en utilisant la commande shell?

14

Mon fichier,

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                                              

Production,

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

Je veux supprimer deux colonnes INFO_NAMet WERTde mon fichier d'entrée.

pmaipmui
la source
Quelles deux colonnes voulez-vous vraiment supprimer? Votre sortie a INFO_NAMet PROCIDsupprimé
neurone
awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tpeut le formater bien.
cuonglm

Réponses:

28

Ne pas imprimer les 6 e et 8 e colonnes

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

Cela a été répondu avant ailleurs sur Stack Overflow.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -ou-de-ligne de commande-sur-linux etc.

Je crois que awkc'est le meilleur pour ça.

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

Il est également possible de l'utiliser cut.

cut -f1,2,3,4,5,7 file
AndreiR
la source
3
Donnez un exemple cutou ne le mentionnez pas?
Drav Sloan
7
juste pour le mentionner: l' --complementoption pour cutpourrait être pratique ici, c'est-à-dire supprimer deux champs plutôt que d'en sélectionner six:cut -f6,8 --complement file
Fiximan
awk fonctionne ...... mais ce qui se passe ... le format est changé .... c'est juste prendre le champ mais pas la structure exacte ... et la coupe ne fonctionne pas ... @AndreiR
pmaipmui
Je l' ai essayé, cut –c1-45,55-58. Mais avant d'exécuter cela, je dois compter le nombre total de caractères, alors seulement je peux nous. Mais je voulais imprimer les colonnes avec le même que mon format d'entrée
pmaipmui
@Nainita vous avez peut-être un séparateur différent qui n'est pas de l'espace. Dans awk, vous devez le spécifier (c'est-à-dire en utilisant -F "\ t" si tabulaire). En utilisant cut, il est nécessaire d'utiliser -d (cut -d, si vous utilisez une virgule).
AndreiR
2

Utilisez printfpour conserver le format de chaque champ. Chaque champ comporte x caractères et le signe moins justifie la chaîne restante.

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