我似乎無法弄清楚如何用 awk 否定我的條件。
例如,假設我有
g ha
a bb
g hc
f cd
t de
g pf
我可以只列印帶有 g 并以 h 開頭的第一列和第二列:
cat test.txt | awk '$1 ~ /g/ && $2 ~ /^h/'
但是我該如何做相反的事情,我只想列印那些不是g并以h. 基本上有輸出:
a bb
f cd
t de
g pf
uj5u.com熱心網友回復:
如果$1 ~ /g/ && $2 ~ /h/為真,則繼續下一行,否則輸出當前行。
awk '$1 ~ /g/ && $2 ~ /h/{next} {print}' test.txt
輸出:
抗體 fc 時間 GP
uj5u.com熱心網友回復:
您也可以使用否定整個匹配!
由于第一個欄位始終是單個字符,您可以在g不使用正則運算式表示法的情況下檢查它$1 ~ /g/是否存在,因為如果字串中的某個位置仍然匹配g。
awk '!($1 == "g" && $2 ~ /^h/)' test.txt
輸出
a bb
f cd
t de
g pf
uj5u.com熱心網友回復:
或任何其他條件的否定(相反)$1 ~ /g/ && $2 ~ /^h/只是貼!在它的前面:
$ awk '!($1 ~ /g/ && $2 ~ /^h/)' file
a bb
f cd
t de
g pf
但您也可以將布爾代數應用于 ( !(a && b)= !a || !b) 以獲得:
$ awk '$1 !~ /g/ || $2 !~ /^h/' file
a bb
f cd
t de
g pf
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/451499.html
上一篇:使用awk列印最小值和最大值
