我已經下列問題刪除在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'
任何幫助?
我已經下列問題刪除在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'
任何幫助?
這將確保:
awk '!($2==1 && $3==0){print}' file
即打印所有除第二列以外的行是1和3r d爲0
'{print}'是多餘的。 –
您正在尋找$2 == 1 && $3 == 0
的否定。通過邏輯的規則,這是
awk '$2 != 1 || $3 != 0'
你想:
awk '!($2==1 && $3 == 0)' file
或等價:
awk '$2 != 1 || $3' file
試試這個
awk '$2$3!="10"' file
乾杯!
這是連接字段和測試匹配某些連接值的常見錯誤,但如果例如$ 2爲「10」而$ 3爲「」,則最好避免它,否則會失敗。 –
是的。謝謝你提醒我。 – NawaMan
您的問題是,與awk的行爲方式相比,您會以負面方式描述您的需求,這迫使您以負面方式考慮解決方案並導致雙重負面/複雜。你不想「刪除一行......」,因爲這不是awk所做的,awk SELECTS行。因此,只需在英文中得到「我想選擇第二個字段不是1或第三個字段不爲零的所有行」,然後簡單地轉換爲代碼,如下面大多數答案中所示爲awk''$ 2 != 1 || $ 3!= 0'文件' –