2016-10-18 31 views
0

如何使用awk或其他函数以及第1行和第1列打印索引值?谢谢使用awk根据行和列名称在矩阵中打印索引值

> input 
name s1 s2 s3 s4 
g1 2 3 4 5 
g2 1 1 1 6 
g3 2 2 2 7 
g4 2 2 2 10 


> output 
g1 s1 2 
g2 s2 1 
g3 s3 2 
g4 s4 10 
+0

背后有什么逻辑了' g3 s4'行?什么指数值?这对我来说很不清楚。 –

+0

其错字。感谢您指出。我现在修改它。 – user1883491

回答

1

用awk只打印矩阵

$ awk 'NR==1 { split($0,x); next } NF>=NR { print $1,x[NR],$NR }' matrix 
g1 s1 2 
g2 s2 1 
g3 s3 2 
g4 s4 10 

解释的主对角线值:

NR==1 { split($0,x);next } # split first record to array x for outputing s col 
NF>=NR {      # test for overflow if an asymmerical matrix 
    print $1,x[NR],$NR  # output 
} 
1

awk来救援!

假设输入文件是制表符分隔

awk -F'\t' 'NR==1{split($0,h);next} 
       {for(i=2;i<=NF;i++) print $1,h[i],$i}' file.tsv 

g1 s1 2 
g1 s2 3 
g1 s3 4 
g1 s4 5 
g2 s1 1 
g2 s2 1 
g2 s3 1 
g2 s4 6 
g3 s1 2 
g3 s2 2 
g3 s3 2 
g3 s4 7 
+0

非常感谢。但有可能避免所有的成对组合?并只打印输出中定义的值? – user1883491