シェルコマンドを使用してファイルから列または複数の列を削除するにはどうすればよいですか?


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

私は2つの列を削除するINFO_NAMWERT、私の入力ファイルから。


本当に削除したい2つの列はどれですか。あなたの出力がありINFO_NAMPROCID削除
ニューロン

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -tうまくフォーマットできます。
クオンルム

回答:


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

3
の例をcut挙げますか、それとも言及しませんか?
Dravスローン

7
ちょうどそれを言及するために:のための--complementオプションcutはここで便利かもしれません、すなわち6を選択するよりも2つのフィールドを削除します:cut -f6,8 --complement file
Fiximan

awkは機能しているが...何が起こっているのか...形式が変更されている....フィールドを取得しているだけで、正確な構造が機能していない...カットが機能していない... @AndreiR
pmaipmui

これを試しましたcut –c1-45,55-58。しかし、これを実行する前に、合計文字数をカウントする必要があります。しかし、入力形式と同じ列
-pmaipmui

@Nainitaには、スペースではない別のセパレータがあるかもしれません。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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.