如何使用Shell命令从文件中删除一列或多列?


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_NAMPROCID删除
神经元

awk '{$(NF-1)=$(NF-2)=""};1' <file | column -t可以很好地格式化它。
cuonglm

Answers:


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 Sloan

7
提一下:在这里的--complement选项cut可能很方便,即删除两个字段而不是选择六个字段:cut -f6,8 --complement file
Fiximan 2015年

awk正在运行...但是发生了什么...格式已更改....它只是在使用字段,但没有确切的结构...并且剪切不起作用... @AndreiR
pmaipmui

我已经尝试过了cut –c1-45,55-58。但是在执行此操作之前,我必须先计算总字符数,然后才能做到这一点。但是我想以与输入格式相同的方式打印列
pmaipmui 2015年

@Nainita也许您使用的其他分隔符不是空格。在awk中,您应该指定它(即,如果使用表格,请使用-F“ \ t”)。使用cut时,必须使用-d(如果使用逗号,则必须是cut -d)。
AndreiR 2015年

2

使用printf保存每个字段的格式。每个字段的长度为x个字符,负号将字符串左对齐。

awk '{ printf("%-8s %-8s %-8s %-8s %-8s %-4s\n", $1, $2, $3, $4, $5, $7)}' file
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.