I need to calculate an equilib开发者_运维问答rium index in bash.
An equilibrium index of a sequence is an index into the sequence such that the sum of elements at lower indices is equal to the sum of elements at higher indices.
Consider the following input data:
-7#1#5#
2#-4#3#0
I first use the following sed
command to change #
into newlines and to calculate the number of elements:
`sed 's/#/\n/g' input.txt | wc -l`
This gives me the following output:
-7
1
5
2
-4
3
How can I display the value of array element after the index number, e.g.:
table[0] => -7
table[1] => 1
.
.
.
table[5] => 3
Use
IFS='#'
table=( $(< input.txt) )
then each element can be accessed by
${table[0]}
${table[1]}
...
From what you currently have, you could use tail +n
to drop n
first lines from a stream. Then you can read the next via head -n1
.
Problem solved. Thank You guys for help.
#!/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
精彩评论