Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash中的平衡指数_Linux_Arrays_Bash - Fatal编程技术网

Linux bash中的平衡指数

Linux bash中的平衡指数,linux,arrays,bash,Linux,Arrays,Bash,我需要在bash中计算一个平衡指数 序列的平衡指数是 对序列进行索引,以便 较低指数的元素之和 等于处的元素之和 更高的指数 考虑以下输入数据: -7#1#5# 2#-4#3#0 我首先使用以下sed命令转换为换行符并计算元素数: `sed 's/#/\n/g' input.txt | wc -l` 这为我提供了以下输出: -7 1 5 2 -4 3 如何在索引号后显示数组元素的值,例如: table[0] => -7 table[1] => 1 . . . table[5]

我需要在bash中计算一个平衡指数

序列的平衡指数是 对序列进行索引,以便 较低指数的元素之和 等于处的元素之和 更高的指数

考虑以下输入数据:

-7#1#5#
2#-4#3#0
我首先使用以下sed命令转换为换行符并计算元素数:

`sed 's/#/\n/g' input.txt | wc -l`
这为我提供了以下输出:

-7
1
5
2
-4
3
如何在索引号后显示数组元素的值,例如:

table[0] => -7
table[1] => 1
.
.
.
table[5] => 3
使用

使用


根据您当前拥有的,您可以使用tail+n从流中删除n条第一行。然后您可以通过head-n1读取下一行。

根据您当前拥有的内容,您可以使用tail+n从流中删除n行第一行。然后您可以通过head-n1阅读下一篇文章。

问题已解决。谢谢你们的帮助

#!/bin/bash

cat input.txt | awk '{if($0~/^>/){print"\n"$0;next}else{printf("%s",$0)}}' > output.txt

IFS='#';table=( $( < output.txt ) );count=${#table[@]}

idx=$(( $count-1 ))

right=0

for (( i=0;i<=$idx;i++ ))
do  
    (( left+=${table[i]} ))
    if [ $left == $right ] 
      then
      echo "( EQ INDEX: $i, EQ VALUE: ${table[i]} )"
    fi
    (( right-=${table[i]} ))
done

问题解决了。谢谢你们的帮助

#!/bin/bash

cat input.txt | awk '{if($0~/^>/){print"\n"$0;next}else{printf("%s",$0)}}' > output.txt

IFS='#';table=( $( < output.txt ) );count=${#table[@]}

idx=$(( $count-1 ))

right=0

for (( i=0;i<=$idx;i++ ))
do  
    (( left+=${table[i]} ))
    if [ $left == $right ] 
      then
      echo "( EQ INDEX: $i, EQ VALUE: ${table[i]} )"
    fi
    (( right-=${table[i]} ))
done

元素数为${table[@]}。${table[@]}命令显示table是一个单元素表$cat input.txt-7152-430$IFS=;$表=$#!/bin/bash cat input.txt | awk '{if($0~/^>/){print"\n"$0;next}else{printf("%s",$0)}}' > output.txt IFS='#';table=( $( < output.txt ) );count=${#table[@]} idx=$(( $count-1 )) right=0 for (( i=0;i<=$idx;i++ )) do (( left+=${table[i]} )) if [ $left == $right ] then echo "( EQ INDEX: $i, EQ VALUE: ${table[i]} )" fi (( right-=${table[i]} )) done