Szkriptek: Python, Perl, Bash, ...

Fájl másolás és átnevezés lista alapján - Perlben, esetleg windows batch szkripttel

Segítségeteket kérném! Ne nevessetek ki, tudom, hogy alap, de sehogy sem boldogulok vele.

Van egy lista TXT fájlom, ami a következőképpen néz ki:

"aaa";"akarmi.jpg,valami.gif,megvalami.png"
"bbb";"fajl.jpg"
"ccc";"ezjokep.jpg,ezisjokep.png"

A feladatom az lenne, hogy átmásolni és egyben átnevezni a lista segítségével egy másik mappába a fenti fájlokat valahogy így:

aaa_00.jpg
aaa_01.gif
aaa_02.png
bbb_00.jpg
ccc_00.jpg
ccc_01.png

Előre is köszönöm!

Update1: Nincs speciális karakter, ékezet, vessző, pontosvessző a fájlnevekben.

Bash script mysql insert into on duplicate key update visszatérési érték

Sziasztok!

Szeretném a segítségeteket kérni! Adott az alábbi függvény egy bash scriptből:

function mysql_insert_or_update()
{
local ip=$1
local stat=1
mysql << EOF
INSERT INTO firewall.kontener (ip) VALUES (INET_ATON('$ip')) ON DUPLICATE KEY UPDATE ts=(NOW());
EOF
stat=$?
return $stat
}

mysql_insert_or_update $IP

Az lenne a kérdésem, hogy szerintetek az megoldható valahogy, hogy visszakapja a függvényből, hogy insert-ált vagy update-elt?

Vagy muszály lesz ketté szednem? PL.:

function mysql_insert()
{
local ip=$1
local stat=1
mysql << EOF
INSERT INTO firewall.kontener (ip) VALUES (INET_ATON('$ip'));
EOF
stat=$?
return $stat
}

function mysql_update()
{
local ip=$1
local stat=1
mysql << EOF
INSERT INTO firewall.kontener (ip) VALUES (INET_ATON('$ip')) ON DUPLICATE KEY UPDATE ts=(NOW());
EOF
stat=$?
return $stat
}

mysql_insert $IP || mysql_update $IP

Logolnom kell, hogy a script insert-ált vagy update-elt?
Felesleges mysql műveletet nem szeretnék végeztetni.

Előfordulhat, hogy rossz irányból közelítem meg a problémát!
Segítségeteket előre is köszönöm!

bash szkript: fájlból változók elérése

Sziasztok!

Kezdő vagyok még, így sokat keresgéltem a megoldás után, de nem találtam semmit.
egy txt fájlban soronként van eltárolva, hogy mit szeretnék másolni és hova.
Például:
innen1 ide1 fájl1
innen2 ide2 fájl2
innen3 ide3 fájl3
stb...
S ezt a txt fájlt szeretném egy bash scripttel feldolgozni.
Valahogy úgy képzelem el, hogy soronként kiveszi a szavakat, berakja változóba, s utána ezek segítségével meghívni az rsyncet.
De nem vagyok ebben biztos..

Tudtok segíteni, hogy milyen ciklussal kellene elérni ezeket a változókat?

Bármilyen ötletnek örülök.

Távoli publikus http könyvtár létezik-e?

Most abba futottam bele, hogy az Operás scriptem beadta a kulcsot, mivel a legújabb kiadás még nem tartalmazza a linuxos változatot. S mivel erre nem is gondoltam, a script letörölte a régit de nem tudta feltenni az újat. :( Puff neki.

Ezért úgy határoztam beleteszek egy if -d ellenőrzést de ez nem jó távoli dolgokra.
A neten eddig csak ssh-s cuccokat találtam.
Van-e linux mappa vagy nincs? Ezt mivel lehet lekérdezni?

http://get.geo.opera.com.global.prod.fastly.net/pub/opera-developer/32…

Amúgy ez egy jóval gyorsabb szerver.

segítség sed ügyben

Hello mindenki!

Sajnos nem nagyon értem még a sed logikáját, de igyekszem. Ezt pld. magam okumláltam össze.
Kérdés van-e egyszerűbb megoldás?

Leszedem a szerverről a fájllistát.

wget --no-remove-listing http://repo.vivaldi.com/archive/rpm/x86_64

Ez sajnos html fájl.
Akkor dumpoljunk.

lynx --dump index.html > list.txt

Majd keressük meg a legfrissebb verziót.

cat list.txt | sed -n '/file:/,/$/p' | sed -n '/snapshot-/,/./p' | awk -vFS='-' '{print $3}' | sort -rV | head -n1

Nekem így is megfelel, de a tanulás végett kérdés van-e egyszerűbb shell megoldás. Egyelőre a perlt még hanyagoljuk.

S ha igen, kérnék hozzá magyarázatot is hogy meg is értsem.

[MEGOLDAVA]Két string összehasonlítás

Sziasztok

Lenne egy olyan problémám, hogy két string változót szeretnék összehasonlítani bash-ban. A lényeg ha különbözik akkor teljesül az else ág.

ilyen formátumúak a stringek amit txt-ből olvasok ki: 15:15:00

ezekkel próbáltam

friss=$(cat /home/pepe/demo/frisss.txt)
friss2=$(cat /home/pepe/demo/frisss2.txt)
echo $friss
echo "$friss2"
if [$friss == $friss2]
then
echo 1
else
echo 2
fi

itt mindig ez az eredmény minden esetben

demo.sh: 31: demo.sh: [15:15:00: not found
2

if [diff $friss $friss];
then
sh proba2.sh
friss=$(cat /home/pepe/idojaras/frisss.txt)
friss2=$(cat /home/pepe/idojaras/frisss2.txt)

itt az eredmény:

demo.sh: 37: demo.sh: [diff: not found

viszont ha simán cliben futtatom és a kát fájl u.a. akkor az eredmény semmi a különbözik akkor

1c1
< 15:15:00
---
> 16:15:00

[MEGOLDVA]E-mail karakterkódolás bash

Sziasztok!

Lenne egy olyan problémám, hogy írtam egy egyszerű skriptet, de ha a kimenetét elküldetem mailben akkor nem jó a karakterkódolás, de a kimenetet fájlban is mentem ott viszont jó. Tudtok erre megoldást??

#!/bin/bash
export LANG=hu_HU.UTF-8
export LC_CTYPE="hu_HU.UTF-8"
export LC_NUMERIC="hu_HU.UTF-8"
export LC_TIME="hu_HU.UTF-8"
export LC_COLLATE="hu_HU.UTF-8"
export LC_MONETARY="hu_HU.UTF-8"
export LC_MESSAGES="hu_HU.UTF-8"
export LC_PAPER="hu_HU.UTF-8"
export LC_NAME="hu_HU.UTF-8"
export LC_ADDRESS="hu_HU.UTF-8"
export LC_TELEPHONE="hu_HU.UTF-8"
export LC_MEASUREMENT="hu_HU.UTF-8"
export LC_IDENTIFICATION="hu_HU.UTF-8"
export LC_ALL="hu_HU.UTF-8"

d=`date +'%y-%m-%d %T'`
d1=`date +'%T'`
LOGFILE="/home/user/xyz.log"

echo $d >> $LOGFILE
maga a parancs>> $LOGFILE

cat $LOGFILE | mail -s "$d1 tárgy" "valami@valami.xyz"

rm -f /home/user/xyz.log

Perl és seek

hello

adott egy kis rendszer már mint erőforrásilag és néhány nagy állományt kell feldolgozni Perl-el.
Arra nincs elég hely, hogy egyben felparsoljam az összest fájlt szóval soronként kéne feldolgozni majd a feldolgozott sorokat kiküldeni egy hállózati csatolóra.

Na a gondom az h hogyan tudok soronkét feldolgozni?

Pl.
van 3x 2G fájl. Nincs elég RAM és SWAP h fel'szürcsöljem' (hamár Perl zsargont - slurp, akarok használni). Összekell őket fésülnöm egy rendezett táblába azaz meg kell nyitnom mind a 3 fájlt egyszerre, majd 1. sor az első fájlból, 1. sor másodikból és az 1. sor a harmadikból.
Szóval valmai ilyesmi kell de ez nem hiszem h jó:

open (FILE1, $file1) or die "The $file1 can't be openned: $!\n";
open (FILE2, $file2) or die "The $file2 can't be openned: $!\n";
open (FILE3, $file3) or die "The $file3 can't be openned: $!\n";
open (MERGE, ">merge.txt") or die "The merge.txt can't be openned: $!\n";

my $line1 = < FILE1 >;
my $line2 = < FILE2 >;
my $line2 = < FILE3 >;
# a helyes format nem jeleníti meg a HUP :(
my $counter = 0;
while (defined($line1) || defined($line2)|| defined($line3)) {
if (defined($line1)) {
print MERGE $counter,"\t",$line1;
$line1 = ;
}
if (defined($line2)) {
print MERGE $counter,"\t",$line2;
$line2 = ;
}

if (defined($line3)) {
print MERGE $counter,"\t",$line3;
$line2 = ;
}
$counter++;
}

mivel itt mind a 3 fájlt egyszerre betöltené a memóriába és az megfektetné a rendszert.

Az hiszem a seek az én barátom de nem értem hogyan tudnám használni.
http://perldoc.perl.org/functions/seek.html
seek(TEST,0,1);

Amint látszik nem vagyok programozó - de dolgozom a fejlődésemen :)

[Megoldva]bash lekérdezés

Még ugyan semmi nincs belőle, de elgondolkodtam hogy kéne írnom egy kis scriptet miszerint pld. hetente megnézné van-e új kiadás az Opera-developerből, majd azt letöltené, és fel is telepítené.
Amin biztos elcsúsznék az a lekérdezés.
A feltelepített program verzió számát gondoltam összevetni hogy van-e frissebb a szerveren.
ftp://ftp.opera.com/pub/opera-developer/

Bár van dátum is. Viszont mindenhogy kérdés hogy miként szedjem le pont azt, ami kell?
Félreértés ne essék, nem komplett megoldást keresek, csak hogy hogyan hasonlítsam össze és jelöljem ki a legfrissebbet?
Amihez nem értek az a sed. Pedig ide biztos az kell.

Talán az utolsó telepítés, és az aktuális időhöz legközelebbi időpontot kell figyelembe vennem. Nem is tudom melyik lenne az egyszerűbb?