2012-12-12 29 views
3

我已經下列問題刪除在bash(AWK)線: 我有這樣一個文件:如何使用2個條件

1 3 4 
2 5 6 
3 1 3 
4 1 0 
5 7 0 
6 0 1 

,我想刪除包含在第二列線1和第三個數字0所以結果應該是:

1 3 4 
2 5 6 
3 1 3 
5 7 0 
6 0 1 

我已經試過:awk '$2!=1 && $3 != 0' file

,但它也將刪除行:「5 7 0」和「3 1 3'

任何幫助?

+1

您的問題是,與awk的行爲方式相比,您會以負面方式描述您的需求,這迫使您以負面方式考慮解決方案並導致雙重負面/複雜。你不想「刪除一行......」,因爲這不是awk所做的,awk SELECTS行。因此,只需在英文中得到「我想選擇第二個字段不是1或第三個字段不爲零的所有行」,然後簡單地轉換爲代碼,如下面大多數答案中所示爲awk''$ 2 != 1 || $ 3!= 0'文件' –

回答

2

這將確保:

awk '!($2==1 && $3==0){print}' file 

即打印所有除第二列以外的行是1和3r d爲0

+4

'{print}'是多餘的。 –

3

您正在尋找$2 == 1 && $3 == 0的否定。通過邏輯的規則,這是

awk '$2 != 1 || $3 != 0' 
6

你想:

awk '!($2==1 && $3 == 0)' file 

或等價:

awk '$2 != 1 || $3' file 
0

試試這個

awk '$2$3!="10"' file

乾杯!

+4

這是連接字段和測試匹配某些連接值的常見錯誤,但如果例如$ 2爲「10」而$ 3爲「」,則最好避免它,否則會失敗。 –

+0

是的。謝謝你提醒我。 – NawaMan