1

Как из грубого пакетного файла DOS я могу грубо пересортировать текстовый файл, содержащий список исходных файлов, поддерживаемый вручную, чтобы эти файлы, перечисленные (из того же каталога) в небольшом приведенном ниже примере, снова были сгруппированы вместе? Мне не нравится, как DOS sort.exe переупорядочивает их в чистом алфавитном порядке, где ctype.h и assert.h разделены файлами, перечисленными в подкаталоге c++.

Я бы предпочел сделать это, используя только команды Windows XP/DOS (или Unix) - или, если необходимо, загрузить существующую исполняемую утилиту, которая не требует установки, как сценарии tcl или perl. Жаль, что dir /s /b не может получить входные данные из файла, пытаясь использовать его в качестве фильтра формата, не уверен, что ls может.

Чтобы изменить порядок после того, как DOS sort.exe сделал свое зло:

C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\ar.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\argz.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\assert.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\auto_ptr.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\backward_warning.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\binders.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\boost_shared_ptr.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\functional_hash.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\hashtable_policy.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\cr_section_macros.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\ctype.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\dirent.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\envlock.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\envz.h

Желаемый результат:

C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\ar.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\argz.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\assert.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\cr_section_macros.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\ctype.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\dirent.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\envlock.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\envz.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\auto_ptr.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\backward_warning.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\binders.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\boost_shared_ptr.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\functional_hash.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\hashtable_policy.h

1 ответ1

0

Я не верю, что это очень элегантное решение, но оно работает:

  1. Загрузите пакет GnuWin32 CoreUtils
  2. Извлеките файлы где-нибудь доступными.
  3. Используйте исполняемый файл 'sort' в соответствии с:

    sort <input file> -t \ -k 9 -k 8 -k 7 -k 6 -k 5 -k 4 -k 3 -k 2 -k 1
    

Это предполагает максимальную глубину в ваших файлах 9 (9 полей, разделенных в ваших путях символом обратной косой черты). Выход:

C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\ar.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\argz.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\assert.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\cr_section_macros.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\ctype.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\dirent.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\envlock.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\envz.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\auto_ptr.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\backward_warning.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\binders.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\boost_shared_ptr.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\functional_hash.h
C:\NXP\LpcXpresso_3.6\Tools\arm-none-eabi\include\c++\hashtable_policy.h

Если бы пути были длиннее, чем указано в вашем примере, вам в основном нужно было бы добавить дополнительные ключи -k, чтобы сохранить желаемую сортировку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .