Matrix 使用awk在基于行和列名的矩阵中打印索引值

Matrix 使用awk在基于行和列名的矩阵中打印索引值,matrix,awk,Matrix,Awk,如何使用awk或其他工具以及第1行和第1列打印索引值?谢谢 > 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 awk救援 假设输入文件是以制表符分隔的 awk -F'\t' 'NR==1{split($0,h);next} {for(i=2;i&l

如何使用awk或其他工具以及第1行和第1列打印索引值?谢谢

> 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

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
awk-F'\t''NR==1{split($0,h);next}

{为了(i=2;i
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
awk-F'\t''NR==1{split($0,h);next}

{for(i=2;i使用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
}  

使用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
}  

g3 s4
行后面的逻辑是什么?什么索引值?这对我来说非常不清楚。这是一个打字错误。谢谢你指出它。我现在修改了它。
g3 s4
行后面的逻辑是什么?什么索引值?这对我来说非常不清楚。这是一个打字错误。谢谢你指出。我现在修改了它。非常感谢。但是它是可能的吗e避免所有成对组合?只打印输出中定义的值?非常感谢。但是否可以避免所有成对组合?只打印输出中定义的值?