本文介绍了巴什印刷对角线任何规模大小数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以在这里,我有以下code:

 #!/斌/庆典
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'{我我= NF} {printf的%S,$我;我 - }!

编辑:由于埃德已经利用所有的美好和适当的 AWK 解决方案,我会在本机抛出庆典解决方案:

  $猫t.sh
#!/斌/庆典而阅读-ra数;做
        :$ {I:= $ {#号[@]​​}}
        诊断+ =($ {号码[ - 我]})
完成<的test.txt
回声$ {诊断[@]}

  $ ./t.sh
4 7 1 4

So here I have the following code:

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

Which will take input such as:

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

and print the diagonal that falls from upper right to bottom left.My question is.. How can I do this for an array of ANY size? I have tried

 {f=NF}

However this resulted in: "awk: run time error: negative field index $-1 FILENAME="-" FNR=2 NR=2"

解决方案
awk '!i{i=NF}{printf "%s ",$i;i--}'

EDIT: Since Ed has already exploited all the nice and proper awk solutions I'll throw in a native bash solution:

$ cat t.sh
#!/bin/bash

while read -ra numbers; do
        : ${i:=${#numbers[@]}}
        diag+=("${numbers[--i]}")
done < test.txt
echo "${diag[@]}"

.

$ ./t.sh
4 7 1 4

这篇关于巴什印刷对角线任何规模大小数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 19:14