Bash - 从矩阵打印对角线

时间:2014-03-23 22:47:44

标签: 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}'

2 个答案:

答案 0 :(得分:1)

你很亲密:

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))}'

也请参阅link in jaypal's comment

答案 1 :(得分:0)

从左上角打印到右下角

awk '{printf(" %d", $NR)}  END{print ""}'

打印与记录编号对应的列;最后,打印换行符。如果你不想要领先的空间:

awk '{printf("%s%d", pad, $NR); pad=" "}  END{print ""}'

从右上角打印到左下角

awk '{if (NF >= NR) printf(" %d", $(NF - NR + 1))}  END{print ""}'
awk '{if (NF >= NR) printf("%s%d", pad, $(NF - NR + 1)); pad=" "}  END{print ""}'

请注意,没有一个程序能够特别巧妙地处理格式错误的数组。

  • GIGO - 垃圾进,垃圾出。