Wie entferne ich eine oder mehrere Spalten aus einer Datei mit dem Shell-Befehl?


14

Meine Datei,

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                                              

Ausgabe,

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

Ich möchte zwei Spalten INFO_NAMund WERTaus meiner Eingabedatei löschen .


Welche beiden Spalten möchten Sie wirklich entfernen? Ihre Ausgabe wurde INFO_NAM& PROCIDgelöscht
— Neuron

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tkann es schön formatieren.
— Dienstag,

Antworten:


28

Drucken Sie nicht 6 th und 8 - ten Spalte

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

16

Dies wurde bereits zuvor auf Stack Overflow beantwortet.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -oder-von-befehlszeile-unter-linux etc ..

Ich glaube, das awkist das Beste dafür.

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

Es ist auch möglich, zu verwenden cut.

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

3
Nennen Sie ein Beispiel dafür cutoder erwähnen Sie es nicht?
— Drav Sloan

7
Nur um es zu erwähnen: Die --complementOption für cutkönnte hier nützlich sein, dh das Entfernen von zwei Feldern anstatt der Auswahl von sechs:cut -f6,8 --complement file
— Fiximan

awk funktioniert ...... aber was passiert ... das Format wird geändert .... es nimmt nur das Feld, aber nicht die genaue Struktur ... und cut funktioniert nicht ... @AndreiR
— pmaipmui

Ich habe es versucht cut –c1-45,55-58. Aber bevor ich das ausführen kann, muss ich die Gesamtzahl der Zeichen zählen, dann kann nur ich es uns sagen. Aber ich wollte die Spalten mit dem gleichen Eingabeformat
— drucken

@Nainita vielleicht hast du anderes Trennzeichen, das kein Leerzeichen ist. In awk sollten Sie es angeben (dh mit -F "\ t", wenn tabellarisch). Bei Verwendung von cut muss -d verwendet werden (cut -d, wenn ein Komma verwendet wird).
— AndreiR

2

Verwenden Sie printfdiese Option , um das Format jedes Felds beizubehalten. Jedes Feld ist x Zeichen lang und das Minuszeichen steht für die verbleibende Zeichenfolge.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.