如何排除具有给定列的行?

如何排除具有给定列的行?

有一个输入文件,其中包含制表符分隔的列。

我们需要删除第四列和第十一列中包含“NA”的行。

问题:我们如何在 awk 中做到这一点?

答案1

awk -F"\t" '$4 != "NA" || $11 != "NA"' filename

请注意,awk 不会就地编辑文件。如果要将更改保存回文件,则:

tmp=$(mktemp)
awk -F"\t" '...' filename > "$tmp" && mv "$tmp" filename

答案2

您告诉awk打印不符合您标准的行。

BEGIN { FS="\t" }
$4 != "NA" || $11 != "NA"

这是布尔逻辑的逆过程,其中~a|~b == a&b.

相关内容