如何删除包含少于 n 个项目的所有行

发布于 2024-10-30 01:30:05 字数 393 浏览 6 评论 0原文

我想删除包含少于 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

实际上 awksed 解决方案都是可以接受的。

I want to remove all lines containing less than n number of items, space separated.

Say I want to remove lines containing less than 3 items. So the file below:

sdf sdfsdf sdfgsdf sdfsdfsd
sdf sdfsdf 
sdf sdfsdf sdfgsdf 
sdf sdfsdf sdfgsdf  ertert

Should result in:

sdf sdfsdf sdfgsdf sdfsdfsd
sdf sdfsdf sdfgsdf 
sdf sdfsdf sdfgsdf  ertert

Actually both awk and sed solutions are acceptable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

熟人话多 2024-11-06 01:30:05

这个怎么样:

awk 'NF >= 3' filename

How about this:

awk 'NF >= 3' filename
绮烟 2024-11-06 01:30:05

在 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]

In vim:

:v/\(\S\+\s\+\)\{3,}/d

Another option is

:g/./exec len(split(getline('.'))) < 3 ? 'd' : ''

You could also do something interesting like

:py vim.current.buffer[:] = [l for l in vim.current.buffer if len(l.split()) >= 3]
葬心 2024-11-06 01:30:05

由于有 vim 标签:

:v/\(\S\+\s\)\{2,}\S/d

将 2 替换为 n-1。

Since there is a vim tag:

:v/\(\S\+\s\)\{2,}\S/d

Replace 2 with n-1.

似最初 2024-11-06 01:30:05

我知道您要求使用 vi 解决方案,但这在 perl 中非常简单:

ethan@rover:~$ perl -ne 'print if split > 3' foo

其中“foo”是您的文件。

I know you asked for a vi solution, but this is so dead simple in perl:

ethan@rover:~$ perl -ne 'print if split > 3' foo

where "foo" is your file.

叫思念不要吵 2024-11-06 01:30:05

NF 是记录中的字段数。将 2 替换为你想要的数字

awk '{if (NF > 2) print $0}' inputFile.txt

NF is the number of fields in the record. Replace 2 with number you want

awk '{if (NF > 2) print $0}' inputFile.txt
小猫一只 2024-11-06 01:30:05
~$ cat test.txt | awk '{if(length($3) > 0) print $0;}'

希望这有帮助

~$ cat test.txt | awk '{if(length($3) > 0) print $0;}'

Hope this helps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文