本文介绍了巴什印刷对角线任何规模大小数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以在这里,我有以下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
这篇关于巴什印刷对角线任何规模大小数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!