如何删除linux中包含NA的列

时间:2016-03-29 00:01:29

标签: linux bash awk

我想删除包含任意数量NA的列。我用了这个命令

awk ' $0 !="NA" {print $0}' file

但它不起作用。 例如,文件如下

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

1 个答案:

答案 0 :(得分:1)

您需要对数据进行两次传递。第一遍应该保存数组中的所有输入,找到包含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