скрипт пакетного файла Windows для сортировки URL - PullRequest
2 голосов
/ 02 апреля 2011

Как мне написать пакетный скрипт Windows для сортировки URL, сгруппировав в текстовом файле те, которые имеют уникальные имена файлов?Я не знаю, как описать дальше, чего я хочу достичь, но я надеюсь, что приведенный ниже пример объясняет все:

Я хочу этот текст

http://example.com/5235/Guava.jpg
http://example.com/2725/Guava.jpg
http://example.com/4627/Guava.jpg
http://example.com/8385/Guava.jpg
http://example.com/3886/Lemon.jpg
http://example.com/5896/Lemon.jpg
http://example.com/2788/Lemon.jpg
http://example.com/1758/Lemon.jpg
http://example.com/1788/Apple.jpg
http://example.com/1567/Apple.jpg
http://example.com/8065/Apple.jpg
http://example.com/6467/Apple.jpg
http://example.com/1464/Banana.jpg
http://example.com/6581/Banana.jpg
http://example.com/4642/Banana.jpg
http://example.com/8635/Banana.jpg
http://example.com/2578/Pineapple.jpg
http://example.com/1452/Pineapple.jpg
http://example.com/8652/Pineapple.jpg
http://example.com/9463/Pineapple.jpg
http://example.com/9765/Peach.jpg
http://example.com/3578/Peach.jpg
http://example.com/3583/Peach.jpg
http://example.com/9467/Peach.jpg
http://example.com/3683/Mango.jpg
http://example.com/3479/Mango.jpg
http://example.com/1795/Mango.jpg
http://example.com/7345/Mango.jpg

отсортирован таким образом

http://example.com/5235/Guava.jpg
http://example.com/3886/Lemon.jpg
http://example.com/1788/Apple.jpg
http://example.com/1464/Banana.jpg
http://example.com/2578/Pineapple.jpg
http://example.com/9765/Peach.jpg
http://example.com/3683/Mango.jpg
http://example.com/2725/Guava.jpg
http://example.com/5896/Lemon.jpg
http://example.com/1567/Apple.jpg
http://example.com/6581/Banana.jpg
http://example.com/1452/Pineapple.jpg
http://example.com/3578/Peach.jpg
http://example.com/3479/Mango.jpg
http://example.com/4627/Guava.jpg
http://example.com/2788/Lemon.jpg
http://example.com/8065/Apple.jpg
http://example.com/4642/Banana.jpg
http://example.com/8652/Pineapple.jpg
http://example.com/3583/Peach.jpg
http://example.com/1795/Mango.jpg
http://example.com/8385/Guava.jpg
http://example.com/1758/Lemon.jpg
http://example.com/6467/Apple.jpg
http://example.com/8635/Banana.jpg
http://example.com/9463/Pineapple.jpg
http://example.com/9467/Peach.jpg
http://example.com/7345/Mango.jpg

Другими словами, для этого конкретного примера (с четырьмя из каждого фруктового jpeg) я хочу отсортировать строки в соответствии с этим способом: 1, 5, 9, 13, 17, 21, 25, 2, 6, 10,14, 18, 22, 26 и т. Д.Надеюсь, вы понимаете, о чем я.

Текстовый файл всегда содержит URL-адреса с одинаковым номером каждой "фруктовой" картинки.Не может быть шести файлов jpg lemon и четырех файлов jpg guava.Я надеюсь, вы понимаете, что я имею в виду.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2011

Может быть, что-то вроде этого:

@ECHO OFF
SET origfile=urls.txt
SET c=1
SET skip=4
FOR /L %%c IN (1,1,%skip%) DO IF EXIST %origfile%.%%c DEL %origfile%.%%c
FOR /F "tokens=*" %%L IN (%origfile%) DO CALL :process "%%L"
DEL %origfile%
FOR /L %%c IN (1,1,%skip%) DO (
  TYPE %origfile%.%%c >> %origfile%
  DEL %origfile%.%%c
)
GOTO :EOF

:process
ECHO %~1>>%origfile%.%c%
SET /A c=c%%skip+1

Идея состоит в том, чтобы вывести последующие строки в разные файлы, повторяя последовательность каждые 4 строки (а здесь фактически параметризовано 4, так что вы можете легко изменить ее), а затем объединить эти файлы под исходным именем.

1 голос
/ 02 апреля 2011

Вы можете указать sort, с чего начать сравнение:

/+n                         Specifies the character number, n, to
                            begin each comparison.  /+3 indicates that
                            each comparison should begin at the 3rd
                            character in each line.  Lines with fewer
                            than n characters collate before other lines.
                            By default comparisons start at the first

Так что, если ваш префикс URI всегда одинаков (что указано в ваших комментариях), вы можете просто запустить файл через

sort /+25 list.txt /O:list_new.txt

, который должен отсортировать его по имени файла, затем.

1 голос
/ 02 апреля 2011

Запустите это в вашем файле. Алгоритм, как описано в моем комментарии выше.

#!/bin/bash

FILE=$1
FIRST=$(head -1 $FILE)
COUNT=$(grep $FIRST $FILE | wc -l)
LINES=$(uniq $FILE)
for i in $(seq 1 $COUNT); do
    echo $LINES | tr " " "\n"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...