删除包含两列字符串的行

Anj*_*ary 4 sed awk text-processing

我有一个制表符分隔的文件:

TRINITY_DN42298_c0_g1_i1.p1 NA  NA
TRINITY_DN12995_c0_g1_i1.p1 PF06799 NA
TRINITY_DN2326_c0_g1_i4.p3  NA  NA
TRINITY_DN6047_c0_g1_i1.p1  PF10585 GO:0008641
TRINITY_DN37780_c0_g1_i3.p2 PF00071 GO:0003924,GO:0005525
TRINITY_DN2787_c0_g1_i2.p1  NA  NA
TRINITY_DN29879_c0_g1_i3.p1 PF01657 NA
TRINITY_DN72702_c0_g1_i1.p1 PF00498 GO:0005515
TRINITY_DN24890_c0_g1_i7.p1 PF00854 GO:0016020,GO:0022857,GO:0055085
TRINITY_DN46477_c0_g1_i1.p1 PF00069 GO:0004672,GO:0005524,GO:0006468
Run Code Online (Sandbox Code Playgroud)

我想删除第 2 列和第 3 列中都有 NA 的行:

TRINITY_DN12995_c0_g1_i1.p1 PF06799 NA
TRINITY_DN6047_c0_g1_i1.p1  PF10585 GO:0008641
TRINITY_DN37780_c0_g1_i3.p2 PF00071 GO:0003924,GO:0005525
TRINITY_DN29879_c0_g1_i3.p1 PF01657 NA
TRINITY_DN72702_c0_g1_i1.p1 PF00498 GO:0005515
TRINITY_DN24890_c0_g1_i7.p1 PF00854 GO:0016020,GO:0022857,GO:0055085
TRINITY_DN46477_c0_g1_i1.p1 PF00069 GO:0004672,GO:0005524,GO:0006468
Run Code Online (Sandbox Code Playgroud)

试过

sed -i '/NA/d' ./file.txt
Run Code Online (Sandbox Code Playgroud)

oli*_*liv 8

你可以试试awk

awk -F'\t' '!($2 == "NA" && $3 == "NA")' file
Run Code Online (Sandbox Code Playgroud)

该选项-F将字段分隔符设置为\t允许获取第二个和第三个参数并检查它们的内容是否都不是NA。在这种情况下awk打印该行。