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 .

pmaipmui
quelle
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
mtk
quelle
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
AndreiR
quelle
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
fd0
quelle