Bash 打印任意大小数组的对角线

标签 bash awk

所以这里我有以下代码:

#!/bin/bash
awk 'BEGIN {f=4} {printf($f" "); f=f-1}'

它将接受如下输入:

1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 7

并打印从右上角到左下角的对角线。 我的问题是..我怎样才能对任意大小的数组执行此操作?我试过了

 {f=NF}

但是这导致:“awk:运行时错误:负字段索引 $-1 FILENAME="-"FNR=2 NR=2"

最佳答案

$ awk '{print $(NF+1-NR)}' file    
4
7
1
4

$ awk -v ORS=" " '{print $(NF+1-NR)}' file
4 7 1 4 

或者如果您想避免在输出行的末尾添加空格并使用终止换行符:

$ awk '{printf "%s%s", (NR>1?FS:""), $(NF+1-NR)} END{print ""}' file
4 7 1 4

关于Bash 打印任意大小数组的对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567581/

相关文章:

bash - 如何停止当前在云形成中运行的所有堆栈操作?

linux - 行尾(新行)在 bash 中转义

c - Bash/C - 使用其他输出/文件中的值更正脚本输出中的列中的无效值

linux - 使用 awk 查找可变长度的正则表达式并根据找到的长度编辑以下行

bash - 从 awk 在当前 shell 中设置变量

linux - 在远程和 "command not found"上执行bash脚本

bash - Unix Shell - 理解括号对变量的使用

bash - 具有文件描述符的重复 IO

python - 使用 awk 实用程序实现的场景

vim - 在 Vim 中或使用 sed、awk 等将所有带有空格的行填充到固定宽度