Jak usunąć kolumnę lub wiele kolumn z pliku za pomocą polecenia powłoki?

14

Mój plik,

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                                              

Wynik,

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

Chcę usunąć dwie kolumny INFO_NAMi WERTz mojego pliku wejściowego.

pmaipmui
źródło
Które dwie kolumny naprawdę chcesz usunąć? Twoje wyniki zostały usunięte INFO_NAMi PROCIDusunięte
neuron
awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tładnie go sformatować.
cuonglm,

Odpowiedzi:

28

Nie należy drukować 6 th i 8 th kolumny

awk '{$6=$8=""; print $0}' file
Mtk
źródło
16

Odpowiedź została udzielona wcześniej w Przepełnieniu stosu.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -lub-z-linii-poleceń-na-Linux itp.

Uważam, że awkjest do tego najlepszy.

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

Można również użyć cut.

cut -f1,2,3,4,5,7 file
AndreiR
źródło
3
Podać przykład cutlub nie wspominać o nim?
Drav Sloan,
7
żeby tylko wspomnieć: --complementopcja cutmoże być przydatna, tzn. usunięcie dwóch pól zamiast wybierania sześciu:cut -f6,8 --complement file
Fiximan
awk działa ...... ale co się dzieje ... format został zmieniony ... po prostu zajmuje pole, ale nie ma dokładnej struktury ... i cięcie nie działa ... @AndreiR
pmaipmui
Próbowałem tego cut –c1-45,55-58. Ale zanim to zrobię, muszę policzyć całkowitą liczbę postaci, więc tylko ja możemy to zrobić. Ale chciałem wydrukować kolumny w tym samym formacie, co mój format wejściowy
pmaipmui
@Nainita, może masz inny separator, który nie jest spacją. W awk powinieneś to określić (tzn. Używając -F "\ t" jeśli tabelarycznie). Używając cut, konieczne jest użycie -d (cut -d, jeśli używasz przecinka).
AndreiR,
2

Użyj, printfaby zachować format każdego pola. Każde pole ma długość x znaków, a znak minus uzasadnia pozostały ciąg.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
fd0
źródło