我想删除所有包含少于 n 项目的行,空格分隔。
假设我要删除包含少于3个项目的行。所以下面的文件:
sdf sdfsdf sdfgsdf sdfsdfsd
sdf sdfsdf
sdf sdfsdf sdfgsdf
sdf sdfsdf sdfgsdf ertert
应该导致:
sdf sdfsdf sdfgsdf sdfsdfsd
sdf sdfsdf sdfgsdf
sdf sdfsdf sdfgsdf ertert
实际上,awk
和sed
解决方案均可接受。
答案 0 :(得分:11)
这个怎么样:
awk 'NF >= 3' filename
答案 1 :(得分:3)
在vim中:
:v/\(\S\+\s\+\)\{3,}/d
另一种选择是
:g/./exec len(split(getline('.'))) < 3 ? 'd' : ''
你也可以做一些有趣的事情,比如
:py vim.current.buffer[:] = [l for l in vim.current.buffer if len(l.split()) >= 3]
答案 2 :(得分:2)
我知道你要求提供vi解决方案,但在perl中这简直太简单了:
ethan@rover:~$ perl -ne 'print if split > 3' foo
其中“foo”是您的文件。
答案 3 :(得分:2)
由于有vim标签:
:v/\(\S\+\s\)\{2,}\S/d
将2替换为n-1。
答案 4 :(得分:1)
NF是记录中的字段数。将2替换为您想要的数字
awk '{if (NF > 2) print $0}' inputFile.txt
答案 5 :(得分:1)
~$ cat test.txt | awk '{if(length($3) > 0) print $0;}'
希望这有帮助