web-dev-qa-db-ja.com

シェルコマンドを使用してファイルから1つまたは複数の列を削除する方法

私のファイル、

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

2つの列を削除したいINFO_NAMおよびWERT入力ファイルから。

17
pmaipmui

印刷しない6番目 と8番目 カラム

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

これは、Stack Overflowの他の箇所で以前に回答されています。

https://stackoverflow.com/questions/15361632/delete-a-column-with-awk-or-sedhttps://stackoverflow.com/questions/7551219/deleting- columns-from-a-file-with-awk-or-from-command-line-on-linux など。

awkが最適です。

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

cutも使用できます。

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

各フィールドの形式を保持するには、printfを使用します。各フィールドの長さはx文字で、マイナス記号は文字列を左揃えにします。

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