Bash-从矩阵打印对角线

Bash-从矩阵打印对角线,bash,awk,Bash,Awk,我有一个这样的文件 1 3 4 5 2 5 0 9 3 4 6 6 0 1 0 1 我想让它从右到左打印出一条对角线 5 0 4 0 到目前为止,我已经有了这篇文章,但它只是打印了最后一篇专栏文章 #!/bin/bash awk '{c=NF}{printf "%d ", $c}{c-=1}' 从左上到右下打印 打印记录编号对应的列;最后,打印一个换行符。如果不需要前导空格: awk '{printf("%s%d", pad, $NR); pad=" "} END{

我有一个这样的文件

1 3 4 5 
2 5 0 9
3 4 6 6 
0 1 0 1 
我想让它从右到左打印出一条对角线

5 0 4 0
到目前为止,我已经有了这篇文章,但它只是打印了最后一篇专栏文章

    #!/bin/bash
    awk '{c=NF}{printf "%d ", $c}{c-=1}'
从左上到右下打印 打印记录编号对应的列;最后,打印一个换行符。如果不需要前导空格:

awk '{printf("%s%d", pad, $NR); pad=" "}  END{print ""}'
从右上到左下打印 请注意,没有一个程序能够特别巧妙地处理格式错误的数组

  • 垃圾进来,垃圾出去
你很接近:

echo "1 3 4 5 
2 5 0 9
3 4 6 6 
0 1 0 1" | awk 'BEGIN{c=4}{printf("%d ", $c);c-=1}'
您必须将
c=NF
部分放在
BEGIN
部分。但是,
NF
还没有定义

因此,如果您的尺寸不固定,您可以使用
NR

echo "1 3 4 5 
2 5 0 9
3 4 6 6 
0 1 0 1" | awk '{printf("%d ", $(NF-NR+1))}'

也请参见。

@jaypal在这里找到了很好的例子,谢谢
echo "1 3 4 5 
2 5 0 9
3 4 6 6 
0 1 0 1" | awk 'BEGIN{c=4}{printf("%d ", $c);c-=1}'
echo "1 3 4 5 
2 5 0 9
3 4 6 6 
0 1 0 1" | awk '{printf("%d ", $(NF-NR+1))}'