Переименование файлов в bash в цикле for с регулярным выражением

Оболочка bashможет хранить отдельные строки в одиночных обычных переменных, списки строк в массивах и строки, связанные с другими строками в ассоциативных массивах. Вы не сможете хранить, например. массивы массивов или ассоциативные массивы ассоциативных массивов (или их комбинации ).

Для конкретных данных, которые вы упомянули, вы могли бы сделать что-то вроде ассоциативного массива:

declare -A goals

goals["teamA"]="0:2:3:4"
goals["teamB"]="1:3:3:3"
# etc.

или

declare -A goals

goals=(
    ["teamA"]="0:2:3:4"
    ["teamB"]="1:3:3:3"
    # etc.
)

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

for team in "${!goals[@]}"; do
    home_goals=$( cut -d : -f1 <<<"${goals[$team]}" )
    away_goals=$( cut -d : -f2 <<<"${goals[$team]}" )
    # etc.

    # use "$team", "$home_goals", "$away_goals" etc. here
done

... но было бы намного эффективнее сделать это на таком языке, как Perl или Python, который допускает произвольное вложение структур данных.

Например, в Perl:

my %goals = ( "teamA" => [ 0, 2, 3, 4 ],
              "teamB" => [ 1, 3, 3, 3 ],
              # etc.
            );
0
26.03.2021, 00:01
1 ответ

Вы можете попробовать выполнить переименование:

for i in part*; do mv "$i" "${i%%.lzo*}.lzo"; done
1
28.04.2021, 22:56

Теги

Похожие вопросы