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