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

13
задан dev-dom
11.11.2022 23:40 Количество просмотров материала 3498
Распечатать страницу

1 ответ

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

0
отвечен ilkhd 2022-11-13 07:28

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх