2013-06-19 140 views
4

下面以特定模式刪除線是我的輸入文件,input.txt在一個領域

Value Value1 value2
5 1 2
1 4 3
2 1 5.5
0 0 0
4 1 0

我需要尋找第三列中的值(5.5),如果在中找到完全刪除行。

,我需要像下面的輸出,output.txt

Value Value1 value2
5 1 2
1 4 3
0 0 0
4 1 0

我試圖awk命令刪除行,但我堅持下面的部分(???)。不要如何從awk命令中刪除整行的行。請建議如何實現這一點。謝謝!
awk -F"\t" '{if($3==5.5) ??? }'

回答

7

如果你想排除與第3列的值5.5所有行則:

awk '$3!=5.5' filename 
+0

感謝resposne。 'awk'$ 3!= 5.5'文件名'這個命令在沒有if條件的情況下可以工作,如果它太基本的話,很抱歉。現在我沒有電腦測試,稍後再試。 – Marjer

+0

是的。 awk將默認打印所有行。因此,條件是排除第3列值爲「5.5」的行。 –

0
perl -lane 'next if($F[2]=~/5.5/);print' your_file 

如果第三列有5.5則該行會被刪除。 但是如果第三列是5.52或15.53,那麼使用上面的命令他們將被刪除。 所以,如果你想只刪除行,如果它有5.5精確匹配,那麼使用下面:

perl -lane 'next if($F[2]=~/\b5.5\b/);print' your_file 

如下測試:

> cat temp 
Value Value1 value2 
5 1 2 
1 4 3 
2 1 5.51 
2 1 5.5 
0 0 0 
4 1 0 
> 

隨着第一個命令:

> perl -lane 'next if($F[2]=~/5.5/);print' temp 
Value Value1 value2 
5 1 2 
1 4 3 
0 0 0 
4 1 0 
> 

隨着第二個命令:

> perl -lane 'next if($F[2]=~/\b5.5\b/);print' temp 
Value Value1 value2 
5 1 2 
1 4 3 
2 1 5.51 
0 0 0 
4 1 0 
> 
+0

除非($ F [2] =〜/ 5.5 /),我寧願'除非':'打印;'。似乎更具可讀性。因人而異。 – devnull

+0

感謝您的迴應,我用awk解決了這個問題。 – Marjer

+0

這裏有一個錯誤。比賽應該是'$ F [2] =〜/ 5 \ .5 /'。但我不禁想知道爲什麼你不使用'$ F [2] eq'5.5''。 –

4

GNU更安全sed

sed -r '/\s*(\S+\s+){2}5.5/d' file