2011-10-27 72 views
8

我要刪除一條線,如果它包含指定一個值線。awk中刪除包含數據

2 5 8 
1 3 7 
8 5 9 

所以,如果我想刪除包含7作爲第三個字段行:

{ 
if($3 == 7){ 
####delete the line 
} 
} 

回答

15

應該足以說

 
$ awk '$3 != 7' 

注意,這個數值比較,並將省略第三個字段所在的行,例如「0.7e1」,但它適用於您提供的樣本數據。

8

刪除包含7

awk '!/7/' yourFile 
+0

這句法不tcsh的工作。需要逃避! – ThomasMcLeod

+6

轉義'!'不是解決方案。解決方案是不使用'tcsh'! –

6

其他的答案工作的線。這裏的原因

awk的標準處理模式是讀一個輸入行,任選地匹配線,並且如果匹配的(可選地)打印該輸入。其他的解決方案使用一個否定匹配,所以線被印刷除非匹配製成。

您的代碼示例不使用否定匹配:它說:「如果事情是真實的,做到這一點。」因爲您要刪除輸入,所以當您匹配該目標時,您可以跳過打印。

{ 
    if($3 == 7){ 
    #skip printing this line 
    next 
    } 
} 

IHTH。

+0

這不起作用,除非您添加一個'else'語句,在其中聲明'print'。 – Masster

+0

問題是「如果我想刪除包含7作爲第三個字段的行:」。我想我已經回答了這個問題。感謝您的關注! :-) – shellter