windows batch fil script til at sortere webadresser

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan skriver jeg et Windows-batch script til at sortere webadresser ved at gruppere dem med unikke filnavne sammen i en tekstfil? Jeg ved ikke, hvordan man beskriver mere, hvad jeg vil opnå, men jeg håber, at eksemplet nedenfor forklarer alt:


Jeg vil have denne tekst


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


sorteret på denne måde


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


Med andre ord vil jeg for dette særlige eksempel (med fire af hver frugt jpeg) sortere linjer på denne måde: 1, 5, 9, 13, 17, 21, 25, 2, 6, 10, 14, 18, 22, 26 og så videre. Jeg håber du får hvad jeg mener.


Tekstfilen indeholder altid url med samme antal af hvert 'frugt' billede. Der kan ikke være seks citron jpg filer og fire guava jpg filer. Jeg håber du får hvad jeg mener.

Bedste reference


Måske noget som dette:


@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


Ideen er at udføre efterfølgende linjer til forskellige filer, gentage sekvensen hver 4 linjer (og 4 er parametriseret her faktisk, så du kan nemt ændre det) og derefter sammenkoble disse filer under det oprindelige navn.

Andre referencer 1


Kør dette på din fil. Algoritme som beskrevet i min kommentar ovenfor.


#!/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 " " "
"
done

Andre referencer 2


Du kan fortælle sort hvor skal man begynde at sammenligne:


/+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


Så hvis dit URI-præfiks altid er det samme (som dine kommentarer angiver) kan du bare køre filen igennem


sort /+25 list.txt /O:list\_new.txt


som skal sortere det efter filnavn, så.