如何使用awk删除具有空字段的行?

时间:2016-12-23 14:04:17

标签: awk

我有一个包含12个字段的文件,我想删除具有空字段记录的行。

我的数据如下:

13 24094 865949 9.5 361 384 2.1 536 1 20150625    
13 45945 865952 1.7 13 287 1.3 513 1 20150815 HF 7MRY1  
13 3741 866032 9.1 212 229 3.3 633 1 20150105 HF 8  
13 6582 866033 9.4 176 203 4.1 642 1 20150121 HF 8  
13 145 866087 11.0 404 447 2.2 449 1 20150719    
13 2051 866093 7.8 183 207 3.2 605 1 20150525   

我需要看到这样的

13 45945 865952 1.7 13 287 1.3 513 1 20150815 HF 7MRY1  
13 3741 866032 9.1 212 229 3.3 633 1 20150105 HF 8  
13 6582 866033 9.4 176 203 4.1 642 1 20150121 HF 8  

我尝试过以下命令,但没有解决问题

awk -F'\t' '$11!=""' infile

4 个答案:

答案 0 :(得分:3)

NF用于字段数

输入data

13 24094 865949 9.5 361 384 2.1 536 1 20150625    
13 45945 865952 1.7 13 287 1.3 513 1 20150815 HF 7MRY1  
13 3741 866032 9.1 212 229 3.3 633 1 20150105 HF 8  
13 6582 866033 9.4 176 203 4.1 642 1 20150121 HF 8  
13 145 866087 11.0 404 447 2.2 449 1 20150719    
13 2051 866093 7.8 183 207 3.2 605 1 20150525   

输出:

$ cat data | awk 'NF==12'
13 45945 865952 1.7 13 287 1.3 513 1 20150815 HF 7MRY1  
13 3741 866032 9.1 212 229 3.3 633 1 20150105 HF 8  
13 6582 866033 9.4 176 203 4.1 642 1 20150121 HF 8  

答案 1 :(得分:3)

awk 'NF>10' file

阅读Arnold Robbins撰写的Effective Awk Programming,第4版,以了解该工具/语言的一些基础知识。

答案 2 :(得分:1)

以下列任一方式使用awk: -

awk '$11!="" && $12!=""' newfile
13 45945 865952 1.7 13 287 1.3 513 1 20150815 HF 7MRY1  
13 3741 866032 9.1 212 229 3.3 633 1 20150105 HF 8  
13 6582 866033 9.4 176 203 4.1 642 1 20150121 HF 8 

(或)使用POSIX兼容的length函数返回包含字段的长度,

awk 'length($11) && length($12)' newfile
13 45945 865952 1.7 13 287 1.3 513 1 20150815 HF 7MRY1  
13 3741 866032 9.1 212 229 3.3 633 1 20150105 HF 8  
13 6582 866033 9.4 176 203 4.1 642 1 20150121 HF 8 

答案 3 :(得分:0)

根据实际数据,一种方法可能是不打印以空格结尾的记录。如果您的数据类似于此(\s下方表示空格字符):

1\s2\s3\s4
5\s6\s7\s
9\s\s\s

即。划界空间将作为太空持有者,你可以:

$ awk '!/ $/' foo
1 2 3 4

记录不会重建,多余的空间也不会被删除。