我有一个包含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
答案 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
记录不会重建,多余的空间也不会被删除。