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

Подсчет уникальных значений в массиве VBA с пользовательскими функциями
Bash ассоциативный массив перестановка ключей
Записать импортируемый массив в файл в Bash?
Проверить, если элемент в массиве в bash
Как использовать условный массив с несколькими условиями для вычисления процентилей?
Bash-хранение значения ключа в переменных, объявленных в ассоциативном массиве
Макрос Word: Как заменить строки в тексте на основе таблицы из 2 столбцов?
Как выделить границы массива в Excel?
Как посчитать количество элементов в массиве в Ansible?
Мне понадобится формула, показывающая количество, итоги и подытоги для набора данных из разных листов
массив ячеек строк в структуре matlab
Создание" временных " формул массива в Excel
Соответствие индексу Excel проверка нескольких столбцов
Как найти среднее время из массива в PowerShell
Среднее по месяцам в пределах нескольких диапазонов дат excel

Bash ассоциативный массив перестановка ключей

я сталкиваюсь со странной проблемой с ассоциативными массивами в bash.

у меня есть следующие файлы в директорию:

ls -lart
drwxr-xr-x. 3 root root 4096 Feb  9 11:14 ..
-rw-r--r--  1 root root 3275 Feb  9 14:16 1.txt
-rw-r--r--  1 root root 3275 Feb  9 14:16 2.txt
-rw-r--r--  1 root root 3275 Feb  9 14:16 3.txt
-rw-r--r--  1 root root    0 Feb 12 15:19 a.txt
-rw-r--r--  1 root root    0 Feb 12 15:19 123.txt
drwxr-xr-x  2 root root 4096 Feb 12 15:19 .

файлы отображаются от старых к новым.

-отправил вывод ls-lart в файл со следующей командой:

ls -lart --block-size=K /test |grep txt |awk '{print ,}'  > /tmp/filestodel.txt

filestodel.txt имеет список файлов (с соответствующим размером) от самых старых до самых новых:

   cat /tmp/filestodel.txt
    1.txt 4K
    2.txt 4K
    3.txt 4K
    a.txt 0K
    123.txt 0K

где первый столбец содержит имя файла а второй размер (в Кбайтах)

-Я определяю массив и вставляю в него эти записи:

declare -A cleanup
while read line
    do
    filetodelname=$(echo $line | awk {'print'});
    filetodelsize=$(echo $line | awk {'print'});
    cleanup[$filetodelname]=$filetodelsize
    done < /tmp/filestodel.txt

идея состоит в том, чтобы удалить файлы, перечисленные в массиве th от самого старого (первого) к самому новому, который будет переводить в Начиная удалять файл 1.txt согласно выходу ls-lart выше.

проблема в том, что, когда я перебираю ключи:

for K in "${!cleanup[@]}"; do echo $K; done   #print filenames

Я получаю этот выход:

2.txt
3.txt
123.txt
1.txt
a.txt

который явно испорчен!

как я могу сохранить исходный порядок файлов в массив?

спасибо,
dom

5
задан dev-dom
источник

1 ответов

вам понадобится 2 массива, проиндексируйте их по номеру в первом проходе: первый получит имена, второй-размеры; затем проиндексируйте их по номеру (от 0 до number_of_files - 1) снова во втором проходе, при выполнении делеций.

0
отвечен ilkhd 2015-02-13 00:42:38
источник

Другие вопросы array bash bash-scripting hashing linux