linux - 如何在 linux 中删除包含 NA 的列

标签 linux bash awk

我想删除包含任意数量 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/

相关文章:

python - Centos7 python 3 flask 安装

linux - 在linux中安装rpm包时如何自动填充用户输入?

linux - Swift - 读取管道输入

sed - 如何在 awk 中模拟 `uniq -d`?

bash - UNIX Bash - 从文件中的特定字符串中删除双引号

linux - 如何使用 awk 测试列值是否在另一个文件中?

linux - 如何停止缓存 'echo'

c++ - 如何从 cvPoint 中分别获取 x 和 y 坐标到 int?

linux - 自动检测文件更改并通过 S3 同步

git - 如何使 bash 假设所有命令都是 git 命令?