我有一个矩阵示例:
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,欢迎作为解决方案。
答案 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
以及数组a
和break
中的对应值。
答案 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