Shell komutunu kullanarak bir sütunu veya birden çok sütunu dosyadan nasıl kaldırabilirim?


14

Dosyam,

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                                              

Çıktı,

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

İki sütunu INFO_NAMve WERTgirdi dosyamdan silmek istiyorum .


Hangi iki sütunun gerçekten kaldırılmasını istiyorsunuz? Çıktınız INFO_NAM& PROCIDSilindi
Neuron

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tgüzel biçimlendirebilir.
cuonglm

Yanıtlar:


28

6 baskı yapmayın inci ve 8 inci sütun

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

16

Bu, Stack Overflow üzerinde başka bir yerde daha önce cevaplanmıştır.

/programming/15361632/delete-a-column-with-awk-or-sed /programming/7551219/deleting-columns-from-a-file-with-awk -veya-linux üzerindeki komut satırından vb.

Bunun awkiçin en iyisi olduğuna inanıyorum .

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

Kullanmak da mümkündür cut.

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

3
Bir örnek verin cutveya bahsetmediniz mi?
Drav Sloan

7
sadece bahsetmek gerekirse: için --complementseçenek cutburada kullanışlı olabilir, yani altı seçmek yerine iki alanı kaldırmak:cut -f6,8 --complement file
Fiximan

awk çalışıyor ...... ama ne oluyor ... biçim değiştirildi .... onun sadece alan alarak değil, tam yapısı ... ve kesim çalışmıyor ... @AndreiR
pmaipmui

Bunu denedim cut –c1-45,55-58. Ama bunu yapmadan önce toplam karakterleri saymalıyım, ancak bunu sadece ben yapabilirim. Ancak sütunları girdi
biçimimle

@ Nainita belki boşluk olmayan farklı bir ayırıcıya sahipsiniz. Awk içinde belirtmelisiniz (örn. Tablo halinde -F "\ t" kullanarak). Cut kullanarak, -d (virgül kullanıyorsanız cut -d) kullanmak gerekir.
AndreiR

2

printfHer alanın biçimini korumak için kullanın . Her alan x karakter uzunluğundadır ve eksi işareti sola doğru dizeyi haklı çıkarır.

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.