Группировка файлов по имени и перемещение их в соответствующие каталоги с помощью awk

Подкачка виртуальной памяти ()включена на уровне ЦП. Это означает, что ЦП использует MMU для преобразования виртуального адреса (, как его видит приложение ), в физический адрес. Память разбита на страницы. Страница может быть либо загружена в память, либо загружена на диск. Если страница находится на диске, то обращение к этой странице приводит к ошибке страницы, которая обрабатывается ОС (ОС загружает страницу с диска ).

Таким образом, если у вас нет свопа, у вас все еще есть виртуальная память, ЦП по-прежнему использует MMU и разбивает память на страницы, но ОС не может перемещать эти страницы на диск.

http://wiki.osdev.org/Paging

1
11.09.2019, 21:45
2 ответа

Поместите все имена файлов в файл примера и выполните следующие шаги

#step1 it creates directory

awk -F "_" '{print $1}' samplefile | awk '{if (!seen [$1]++)print "mkdir" " " $0}'| sh

#step2: moves file to respective directory

 for i in `awk -F "_" '{print $1}' samplefile | sort -u` ; do sed -n '/^'$i'_/p' samplefile | awk -v i="$i" '{print "mv" " " $1 " " i}'|sh ; done
0
27.01.2020, 23:22

Вы не должны делать mvили cpвнутри awk. Следующие работы:

for i in * ; do
  [ -f "$i" ] || continue
  dir_name="$(echo $i | awk -F'_' '{print $1}')"
  mkdir -p -- "$dir_name"
  cp -- "$i" "$dir_name"
done

Однако вместо awkвы можете использовать оператор %в bash, чтобы удалить все после первого символа подчеркивания, чтобы получить имя каталога.

for i in * ; do
  [ -f "$i" ] || continue
  dir_name="${i%%_*}"
  mkdir -p -- "$dir_name"
  cp -- "$i" "$dir_name"
done

(используйте mvвместо cp, если вы хотите переместить)

3
27.01.2020, 23:22

Теги

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