2011-04-04 98 views
2

我想删除包含小于的所有行n项目的数量,空格分隔。如何删除包含少于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解决方案是可以接受的。

回答

11

如何:

awk 'NF >= 3' filename 
+0

如果你有数字作为shell值:'awk -v n = $ num'NF> = n'文件' – 2011-04-05 02:01:24

+0

我想过补充一点,但我觉得更简单是更好的。谢谢,为了让我的答案更完整。 – MJB 2011-04-05 12:19:42

2

我知道你问一个VI的解决方案,但这是等死了简单的用Perl:

[email protected]:~$ perl -ne 'print if split > 3' foo 

其中 “富” 是你的文件。

+0

擅长MJB。在这种情况下,awk比Perl更合适。 – 2011-04-04 19:04:24

1

NF是记录中的字段数。用数字替换2,你想

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

希望这有助于

3

在VIM:

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

另一种选择是

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

你也可以做一些有趣的事情一样

​​
2

由于存在VIM标签:

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

替换2 n-1个。

+0

这也是我的解决方案。 – Drasill 2011-04-06 12:21:34

相关问题