Thread View: pl.comp.lang.perl
5 messages
5 total messages
Started by PAweł
Mon, 15 Jun 2009 13:25
W bashu mi nie idzie :( może w Perlu będzie prościej ...
Author: PAweł
Date: Mon, 15 Jun 2009 13:25
Date: Mon, 15 Jun 2009 13:25
30 lines
1623 bytes
1623 bytes
Witam,
Mam sobie taki skrypcik:
#!/bin/bash
VAR=$((VAR+1))
((VAR++))
for nazwa in * ; do
exec find . -name "*.xml" -type f -print0 | xargs -0 sed -i -e
's/<NR>A200906156300000.</NR>/<NR>A200906156300000${VAR}</NR>/g';
done
Chce w kilkuset plikach XML, we wszystkich wystąpieniach taga "NR" zmienić
istniejącą zawartość na taką samą, tylko żeby ostatnia cyfra była
incrementowana o jeden w górę. Powiedzmy w jednym pliku xml
<NR>A2009061563000001</NR>, w kolejnym <NR>A2009061563000002</NR> itd.
Niestety powyższe nie działa i zamiast incrementacji dokleja mi $VAR do
numeru. Ktoś ma może pomysł jak to zrobić? Może w Perlu będzie prościej?
dzięki wielkie z góry za pomoc
pozdr
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
Author: paweł
Date: Mon, 15 Jun 2009 13:28
Date: Mon, 15 Jun 2009 13:28
10 lines
1175 bytes
1175 bytes
NAwet w sumie zawartość taga <NR></NR> nie jest istotna. Tam mogą wystąpić różne numery. Ważne żeby inkrementował ostatnią cyfrę (wiadomo że zawartość może się składać z 20 znaków, z czego ostatnia to zawsze numer.. pozdr. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
Author: Stachu 'Dozzie' K.
Date: Mon, 15 Jun 2009 13:40
Date: Mon, 15 Jun 2009 13:40
55 lines
2367 bytes
2367 bytes
On 15.06.2009, PAweł wrote:
> Witam,
>
> Mam sobie taki skrypcik:
OMG. Dawno nie widziałem tak spapranego.
> #!/bin/bash
>
> VAR=$((VAR+1))
> ((VAR++))
>
> for nazwa in * ; do
>
> exec[...]
A ten exec co według ciebie zrobi?[*]
> for nazwa in * ; do
>
> exec find . -name "*.xml"
Jaki to twoim zdaniem ma sens? "Dla każdej nazwy z bieżącego katalogu
znajdź w bieżącym katalogu"...
> xargs -0 sed -i -e
> 's/<NR>A200906156300000.</NR>/<NR>A200906156300000${VAR}</NR>/g';
A jakich ty się efektów spodziewasz po nieprzeczytaniu man bash, sekcji
QUOTING?
> Chce w kilkuset plikach XML, we wszystkich wystąpieniach taga "NR" zmienić
> istniejącą zawartość na taką samą, tylko żeby ostatnia cyfra była
> incrementowana o jeden w górę.
To jeszcze trochę ci brakuje w skrypcie. To się robi przez
find .. | while read filename; do ...; done.
> Powiedzmy w jednym pliku xml
><NR>A2009061563000001</NR>, w kolejnym <NR>A2009061563000002</NR> itd.
> Niestety powyższe nie działa i zamiast incrementacji dokleja mi $VAR do
> numeru. Ktoś ma może pomysł jak to zrobić? Może w Perlu będzie prościej?
Parafrazując pewnego mądrego gościa, jeśli ktoś ma problem z napisaniem
skryptu zaraz krzyczy: "wiem! napiszę to w Perlu!". I teraz ma już dwa
problemy...
[*] Przypadkiem akurat zostanie uruchomiony w subshellu, więc nie
zaszkodzi. Ale tylko przypadkiem.
--
Stanislaw Klekot
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
Author: Szymon Sokół
Date: Mon, 15 Jun 2009 14:09
Date: Mon, 15 Jun 2009 14:09
25 lines
2677 bytes
2677 bytes
On Mon, 15 Jun 2009 13:25:59 +0000 (UTC), PAweł wrote: > Chce w kilkuset plikach XML, we wszystkich wystąpieniach taga "NR" zmienić > istniejącą zawartość na taką samą, tylko żeby ostatnia cyfra była > incrementowana o jeden w górę. Powiedzmy w jednym pliku xml > <NR>A2009061563000001</NR>, w kolejnym <NR>A2009061563000002</NR> itd. Uwag Dozziego o jakości tego kodu nie będę powtarzał, natomiast chciałbym zauważyć, że sam problem jest źle zdefiniowany. Co to znaczy "taką samą, tylko żeby ostatnia cyfra była incrementowana o jeden w górę"? Nie czepiam się tu słowa "incrementowaną" (choć po polsku raczej należy powiedzieć "inkrementowaną" albo po prostu "zwiększaną", a skoro zwiększaną, to wiadomo, że w górę, nie w dół...), tylko "taką samą, tylko żeby..." - tzn. jeśli np. w pliku A jest A2009061563000001, to ma zrobić A2009061563000002, a jeśli w pliku B jest A2009061563000029, to ma zrobić... co? a) A2009061563000003, bo to następna liczba po A2009061563000002; b) A2009061563000030, bo to następna liczba po A2009061563000029; c) A2009061563000020, bo napisałeś, że zwiększana ma być *ostatnia* cyfra; d) Masaj? -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Re: W bashu mi nie idzie :( może w Perlu będzie prościej ...
Author: Pasman
Date: Thu, 25 Jun 2009 09:33
Date: Thu, 25 Jun 2009 09:33
6 lines
1469 bytes
1469 bytes
> Może w Perlu będzie prościej? > długosc skryptu w perlu bedzie zblizona pasman
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads