Действительно ли я могу отсортировать файлы A-Z и в то же время Z-A?

Вопрос

Я пытаюсь отсортировать и переименовать большое количество файлов, которые маркированы #####_##

Левая сторона подчеркивания является числами (например, 32956715, 32956810, и т.д.), которые не повторяются.
Правая сторона подчеркивания является также числами (например, 1, 2, 3, и т.д.), и они действительно повторяются.

Пример отправляется в pastebin

(Левая сторона является количеством сканирования, и правая сторона является страницей того конкретного сканирования.)

Я хотел бы смочь отсортировать левую сторону подчеркивания Z-A и правая сторона A-Z.

Пример:

3_1
3_2
3_3
2_1
2_2
2_3
1_1
1_2
1_3

Я открыт для любых предложений, которые достигают результата, который я ищу.

В настоящее время я использую irfanview для отправки имен файлов в текстовый файл, затем копируя и вставляя текст в Excel, разделяя имена файлов в colums, затем сортируя столбец с Левой стороной подчеркивания Z-A и столбец с Правой стороной подчеркивания A-Z. Затем у меня чрезвычайно обратный процесс и есть irfanview загрузка средства просмотра миниатюры файлы с помощью txt файла, созданного из моего правильно отсортированного списка Excel.

Должен быть лучший путь право?

Спасибо!

ОБНОВЛЕНИЕ

Больше информации, чтобы попытаться разъяснить вопрос. Я смущен для принятия этого, но конечный результат состоит в том, чтобы распечатать каждый из этих файлов и сделать, чтобы они были навзничь в обратном хронологическом порядке (новейший документ о вершине (навзничь) и самый старый документ о нижней части (навзничь)). (Печать не очень технически подкована, это? Я могу все еще быть в клубе суперпользователя-.)

Клиент дает нам диск изображенных документов (размолвки или gifs с jpgs, смешанным в). Диски могут иметь где угодно от 50 до 20 000 изображений на них. Я должен распечатать их. Меньшие изображения numbers=older и большие изображения numbers=newer. Я использую средство просмотра миниатюры Irfanview для пакетной печати к большому копировальному устройству. Прямо сейчас я могу только отсортировать изображения A-Z прежде, чем распечатать, все еще сохраняя их в некотором распознаваемом порядке. Затем я должен пройти печатный стек и сделать обратную хронологическую сортировку меня. Это является очень трудоемким, и с вложениями к документам трудно определить, где остановки документа и следующее начинаются.

Комментарии

Я не уверен, понял ли я вопрос. Если левый набор цифр никогда не повторяет затем, что проблема не существует. У Вас не может быть ситуации как 30000_1, 30000_2, потому что левая сторона не повторяется. – Sahil

Вы корректны. Они действительно повторяются, существует ли больше чем одна страница в отсканированном документе. Я просто пытался дифференцировать такое повторение от повторения на правой стороне, которая всегда запускается с 1 и подсчитывает на основе числа страниц в документе.

Я хочу благодарить всех, кто уже задал вопросы. Это означает, что Вы, по крайней мере, читаете вопрос и попытались бы помочь, если я не пошел на многое для смущения Вас. Я надеюсь, что моя дополнительная информация отвечает на другие вопросы, которые я не рассматривал конкретно.

Ответы

Ответ сценария Lua выглядит многообещающим, но я получаю ошибку при попытке использовать его. Мысли?

lua -e "io.stdout:setvbuf 'no'" "Reverse_Sort.lua" 
lua: Reverse_Sort.lua:16: attempt to compare number with nil
stack traceback:
 Reverse_Sort.lua:16: in function <Reverse_Sort.lua:6>
 [C]: in function 'sort'
 Reverse_Sort.lua:32: in main chunk
 [C]: ?
Exit code: 1
0
задан 11.01.2011, 02:50

1 ответ

Так как Вы сказали, что это - повторяющаяся проблема, сценарий является соответствующим.

Вот сценарий Lua для получения Вас движение.

Править: Я обновил сценарий на основе Вашей дополнительной информации. Это возьмет файл, содержащий имена файлов, отсортирует их и создаст новый файл в отсортированном порядке.

Сценарий (отредактирован)

-- Get input and output filenames from the command line or pick defaults
input_filename = arg[1] or 'unsorted.txt'
output_filename = arg[2] or 'sorted.txt'

-- Define custom sort function
function custom_sort(filename1, filename2)

    a, b = string.match(filename1, '(%d+)_(%d+)')
    c, d = string.match(filename2, '(%d+)_(%d+)')

    a = tonumber(a)
    b = tonumber(b)
    c = tonumber(c)
    d = tonumber(d)

    if a > c then
        return true
    elseif a < c then
        return false
    else
        return b < d
    end
end

-- Read filenames from file into table
local filenames = {}
for line in io.lines(input_filename) do
    filenames[# filenames + 1] = line
end

-- Sort table using our custom sort function
table.sort(filenames, custom_sort)

-- Write sorted filenames to file
io.output(output_filename)
for _,filename in ipairs(filenames) do
    io.write(filename, '\n')
end

-- Done

Lua имеет os.rename () функция, чтобы на самом деле сделать переименование файла, или Вы могли, вероятно, вывести текстовый вывод сценария в утилиту переименования.

1
ответ дан 24.11.2019, 12:12

Теги

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