LINUX.ORG.RU

История изменений

Исправление HolyBoy, (текущая версия) :

Спасибо за помощь!

Твой скрипт был не совсем тем, что требовалось, т.к. вид обрабатываемого файла не постоянный, количество параметров в секции может меняться. Показанный пример — это только одно из возможных состояний.

Однако, посмотрев приведённые варианты, я родил вот такое:

#!/bin/bash

F="$1"
RES="$2"

i=0
unset vals
while read line; do
    if [ "$(expr "$line" : '\(\/\)')" == "/" ]; then
        (for j in $(seq 0 $((${#vals[*]} - 1))); do
            echo "${vals[$j]}"
        done) | sort
        unset vals
        echo "$line"
        i=0
    else
        vals[$i]="$line"
        ((i++))
    fi
done < "$F"

(for j in $(seq 0 $((${#vals[*]} - 1))); do
    echo "${vals[$j]}"
done) | sort

Этот вариант уже делает то, что надо. Он, конечно, не особо чистый, надо, например, повторяющийся код вынести в функцию, но это уже мелочи.

Исходная версия HolyBoy, :

Спасибо за помощь!

Твой скрипт был не совсем тем, что требовалось, т.к. вид обрабатываемого файла не постоянный, количество параметров в секции может меняться. Показанный пример — это только одно из возможных состояний.

Однако, посмотрев приведённые варианты, я родил вот такое:

#!/bin/bash

F="$1"
RES="$2"

i=0
unset vals
while read line; do
    if [ "$(expr "$line" : '\(\/\)')" == "/" ]; then
        (for j in $(seq 0 $((${#vals[*]} - 1))); do
            echo "${vals[$j]}"
        done) | sort
        unset vals
        echo "$line"
        i=0
    else
        vals[$i]="$line"
        ((i++))
    fi
done < "$F"

(for j in $(seq 0 $((${#vals[*]} - 1))); do
    echo "${vals[$j]}"
done) | sort

Этот вариант уже делает то, что надо.