Как удалить столбец или несколько столбцов из файла с помощью команды оболочки?

14

Мой файл,

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                                              

Выход,

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

Я хочу удалить два столбца INFO_NAMи WERTиз моего входного файла.

pmaipmui
источник
Какие две колонки вы действительно хотите удалить. Ваш вывод был INFO_NAM& PROCIDудален
нейрон
awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tможет отформатировать это красиво.
Cuonglm

Ответы:

28

Не печатать 6- й и 8- й столбец

awk '{$6=$8=""; print $0}' file
холодный морской тропический воздух
источник
16

На этот вопрос уже давали ответы в других разделах переполнения стека.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -или-из-командной строки-на-Linux и т. д ..

Я считаю, awkчто это лучшее для этого.

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

Можно использовать cutтакже.

cut -f1,2,3,4,5,7 file
AndreiR
источник
3
Приведите пример cutили не упомяните это?
Драв Слоан,
7
просто упомянуть об этом: здесь может пригодиться --complementопция for cut, то есть удаление двух полей вместо выбора шести:cut -f6,8 --complement file
Fiximan
awk работает ...... но что происходит ... формат меняется .... он просто берет поле, но не точную структуру ... и вырезать не работает ... @AndreiR
pmaipmui
Я пробовал это cut –c1-45,55-58. Но прежде чем выполнить это, я должен посчитать общее количество символов, тогда только я могу это использовать. Но я хотел напечатать столбцы с тем же форматом ввода
pmaipmui
@ Наинита, может у тебя другой разделитель, а не пробел? В awk вы должны указать это (то есть, используя -F "\ t", если табличный). Используя cut, необходимо использовать -d (cut -d, если используется запятая).
AndreiR
2

Используйте printfдля сохранения формата каждого поля. Каждое поле имеет длину x символов, а знак минус соответствует оставшейся строке.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
fd0
источник