我想删除包含任意数量 NA 的列。我用了这个命令
awk '$0 !="NA"{print $0}' 文件
但它不起作用。 例如文件如下
1 2 3 NA 6 male
4 6 2 1 NA female
NA 2 2 NA 3 male
7 2 2 7 NA male
我想输出文件为
2 3 male
6 2 female
2 2 male
2 2 male
最佳答案
您需要对数据进行两次传递。第一步应该将所有输入保存在一个数组中,找到包含 NA
的列号,并将其保存在另一个数组中。然后在最后打印所有保存的数据,但跳过第二个数组中的列。
awk '{ lines[NR] = $0; for (i = 1; i <= NF; i++) if ($i == "NA") skip[i] = 1;}
END { for (i = 1; i <= NR; i++) {
nf = split(lines[i], fields);
for (j = 1; j <= nf; j++) if (!(j in skip)) printf("%s ", fields[j]);
printf("\n");
}
}' inputfile > outputfile
关于linux - 如何在 linux 中删除包含 NA 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273232/