У меня странная проблема с ассоциативными массивами в 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 $9,$5}' > /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$1'});
filetodelsize=$(echo $line | awk {'print$2'});
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
который явно запутался!
Как я могу сохранить исходный порядок файлов в массиве?
Спасибо дом