是否存在可以删除所有没有完整数据的行的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
感谢。
答案 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
,它就会使用空格(制表符,空格等..)作为字段分割器。