查找第一次出现的标题值" 1"列

时间:2017-10-07 18:01:39

标签: matrix

我有一个矩阵示例:

    1   3   5   8   10  12
50  1   1   1   1   1   1
100 0   0   1   1   1   1
150 0   0   1   1   1   1
200 0   0   0   1   1   1
250 0   0   0   0   1   1
300 0   0   0   0   1   1
350 0   0   0   0   0   1

对于每个行名称(50,100,150,200等),我想知道什么是"标题"当实例" 1"首先发生。根据这个例子,答案是:

50 1
100 5
150 5
200 8
250 10
300 10
350 12

我不知道如何使用IF和WHEN来从这种格式中获得答案。 R,Excel,bash,awk,欢迎作为解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用 awk 执行此操作,如下所示:

$ awk 'FNR==1{for(i=1; i<=NF; i++){a[i]=$i}; next} {for(i=2; i<=NF; i++){if($i=="1"){print $1, a[i-1]; break}}} ' file
50 1
100 5
150 5
200 8
250 10
300 10
350 12

说明:

对于标题,FNR==1,我们填充数组a中的所有值;
对于所有下一行,我们检查哪个字段等于1,如果找到则打印col1值,即$1以及数组abreak中的对应值。

答案 1 :(得分:0)

Awk解决方案:

awk 'NR==1{ for(i=1;i<=NF;i++) h[i]=$i; next }
     { 
         for(i=2;i<=NF;i++) { if($i==1) { n=h[i-1]; break } } 
         print $1,(n)?n:"None"; n=""
     }' file