2011-04-04 64 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

相關問題