AWK:使用第一列作为参考打印矩阵的列

AWK:使用第一列作为参考打印矩阵的列,awk,Awk,我想读取矩阵中的第一列,然后使用第一列作为参考打印该矩阵的列。例如: mat.txt 2 10 6 12 3 4 11 1 22 6 5 15 3 18 9 使用第一列作为参考,我希望得到第2、4和5列,并在开始处输入第一列的值 2 10 12 3 4 11 22 6 5 15 18 9 我尝试过这个,但效果不好: awk 'FNR==NR{c++;cols[c]=$1;end} {for(i=1;i<=c;i++) printf("%s%s",$(cols[i]+1

我想读取矩阵中的第一列,然后使用第一列作为参考打印该矩阵的列。例如:

mat.txt
2 10 6 12 3
4 11 1 22 6
5 15 3 18 9
使用第一列作为参考,我希望得到第2、4和5列,并在开始处输入第一列的值

2 10 12 3
4 11 22 6
5 15 18 9
我尝试过这个,但效果不好:

awk 'FNR==NR{c++;cols[c]=$1;end}
            {for(i=1;i<=c;i++) printf("%s%s",$(cols[i]+1),i<c ? OFS : "\n")}' mat.txt mat.txt
这可以做到:

awk 'FNR==NR {a[NR]=$1;next} {printf "%s ",a[FNR];for (i in a) printf "%s ",$(a[i]);print ""}' mat.txt{,}
2 10 12 3
4 11 22 6
5 15 18 9

{,}
使文件被使用两次。

太棒了!!a[FNR]做这个把戏!!!{.}也很有用。还有一个问题。如果可以打印a数组(引用)作为标题(第一行),然后打印矩阵?@ManuelRamón如果您想打印第一行中的引用列,您可以这样做:
awk'FNR==NR{a[NR]=1;next}FNR==1{for(i in a)printf“%s”,a[i];print'}{for(i in a)printf“%s”,$(a[i]);print'}
PS this
a[FNR]
也可以写成一个[++j]+1!!非常感谢您的帮助和解释@Jotne