Як видалити стовпчик або кілька стовпців з файлу за допомогою команди оболонки?


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зі свого вхідного файлу.


Які два стовпці ви дійсно хочете видалити. Ваш результат видалено 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-column-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

3
Наведіть приклад cutчи не згадайте про це?
Драв Слоун

7
просто згадую: тут може бути зручним --complementваріант для cut, тобто видалення двох полів, а не вибору шести:cut -f6,8 --complement file
Fiximan

awk працює ...... але що відбувається ... формат змінюється .... його просто прийняття поля, але не точна структура ... і вирізання не працює ... @AndreiR
pmaipmui

Я спробував це, cut –c1-45,55-58. Але перед тим, як виконати це, я повинен підрахувати загальну кількість символів, тоді тільки я можу це зробити. Але я хотів надрукувати стовпці з таким же, як і моїм форматом введення
pmaipmui

@Nainita, можливо, у вас є інший роздільник, який не є простором. Вам слід вказати його (тобто використовувати -F "\ t" у таблиці). Використовуючи cut, потрібно використовувати -d (cut -d, якщо використовується кома).
АндрійР

2

Використовуйте printfдля збереження формату кожного поля. Кожне поле має x символів, а знак мінус виправдовує рядок зліва.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.