如果列包含特定字符串,则选择列标题

问题描述 投票:0回答:1

我有一个很大的制表符分隔文件,其中每一列都是一个患者,每一行显示特定位置的基因型,其中缺失的数据用 ./ 表示。 我想提取在任何位置包含缺失基因型的列的列标题。

示例:

Variant  P_1  P_2  P_3
var_1    0/0  ./.  1/0
var_2    ./.  ./.  0/0
var_3    1/0  ./.  1/0

预期产量

P_1
P_2

我尝试过-不成功:

code=$(                
  awk '{for (i=1; i<=NF; i++)
        if ($i == "./.") {printf NR==1, sep "\n"}
    }' file
) &&   
awk "{print $code}" file

如有任何建议,我会很高兴!

bash shell awk
1个回答
0
投票

将标题保存为第一个记录中的数组,然后保存后续记录中出现

./.
的列索引。最后,根据保存的列索引输出标题项:

awk '
  NR==1 {split($0,h); next}
  {for (i=1; i<=NF; i++) if ($i == "./.") a[i]}
  END {for (i in a) print h[i]}
'
P_1
P_2
© www.soinside.com 2019 - 2024. All rights reserved.