Индекс равновесия в баш - PullRequest
       5

Индекс равновесия в баш

1 голос
/ 13 января 2011

Мне нужно вычислить индекс равновесия в bash.

Индекс равновесия последовательности - это индекс в последовательности, такой, что сумма элементов при более низких индексах равна сумме элементовпри более высоких индексах.

Рассмотрим следующие входные данные:

-7#1#5#
2#-4#3#0

Сначала я использую следующую команду sed, чтобы изменить # на новые строки и вычислить числоelements:

`sed 's/#/\n/g' input.txt | wc -l`

Это дает мне следующий вывод:

-7
1
5
2
-4
3

Как я могу отобразить значение элемента массива после номера индекса, например:

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

Ответы [ 3 ]

4 голосов
/ 13 января 2011

Используйте

IFS='#'
table=( $(< input.txt) )

, тогда к каждому элементу можно получить доступ

${table[0]}
${table[1]}
...
0 голосов
/ 16 января 2011

Проблема решена. Спасибо, ребята, за помощь.

#!/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
0 голосов
/ 13 января 2011

Из того, что у вас есть, вы можете использовать tail +n для удаления n первых строк из потока. Затем вы можете прочитать следующее через head -n1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...