用于删除包含不完整数据的行的Awk或Perl解决方案

时间:2011-11-11 12:44:12

标签: perl awk

是否存在可以删除所有没有完整数据的行的Awk或Perl单行。我发现自己经常需要这样的东西。例如,我目前有一个制表符分隔的文件,如下所示:

1    asdf    2
9    asdx    4
3    ddaf    6
5            4
2    awer    4

如何删除字段2中没有值的行?

如何删除任何一个字段中没有值的行?

我试图做这样的事情:

awk -F"\t" '{if ($2 != ''){print $0}}' 1.txt > 2.txt

感谢。

6 个答案:

答案 0 :(得分:4)

在awk中,如果你知道每行应该有3个元素:

awk -F'\t+' 'NF == 3' INFILE > OUTFILE

答案 1 :(得分:2)

具体解决方案:

awk -F'\t' '$2 != ""' input.txt > output.txt

对于通用的解决方案:

awk -F'\t' -vCOLS=3 '{ 
    valid=1; 
    for (i=1; i<=COLS; ++i) { 
        if ($i == "") { 
            valid=0; 
            break; 
        } 
    } 
    if (valid) { 
        print; 
    } 
}' input.txt > output.txt

答案 2 :(得分:2)

我只想查找连续的标签,或者前导或尾随标签:

perl -ne 'next if /\t\t/ or /^\t/ or /\t$/; print' tabfile

答案 3 :(得分:1)

perl -lane 'print if $#F == 2' INFILE

答案 4 :(得分:0)

perl -F/\t/ -nle 'print if @F == 3' 1.txt > 2.txt

答案 5 :(得分:0)

只需使用awk 'NF == 3' INFILE > OUTFILE,它就会使用空格(制表符,空格等..)作为字段分割器。