я сталкиваюсь со странной проблемой с ассоциативными массивами в 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