shell script HELP

Fórumok

shell script HELP

Hozzászólások

[code:1:a638613312]
#!/bin/sh

sed -i.bak -e "s|a'|\á|" \
-e "s|e'|\é|" \
-e "s|i'|\í|" \
-e "s|o'|\ó|" \
-e "s|o:|\ö|" \
-e "s|o\"|\õ|" \
-e "s|u'|\ú|" \
-e "s|u:|\ü|" \
-e "s|u\"|\û|" $1
[/code:1:a638613312]

Egyébként, az ő nem utilde, hanem & #337; az ű nem ucirc, hanem & #369; a nagybetűk pedig eggyel előttük vannak. Csak azért mondom, mert tele van a magyar web kalapos u-kkal és hullámos o-kkal.

folytatása:

ha megvannak az alma_20060101 alma_20060102 alma_20060103 ... stb fáljok ezek lesznek a mintakeresési fáljok egy másik fáljnak

a bibi csak az H annak a dátuma 1 nappal késöbbi...

for i in alma_2006*
do grep -f $i > result_2006......txt
done

ez a kiindulási alapom

A lényeg az H pl az alma_20060101 et kerese a log_20060102 -ben s a végső file dátuma egyezzen meg az alma file dátumával...

tud valaki segíteni?

[quote:af58bdfb5e="vicepete"]Sziasztok!

S.O.S. segítség kellene Shell Script írásban!!!

Aki tud segíteni az írjon mailt, vagy keressen meg MSN-n vagy ICQ-n

Köszi

Talán ha leírnád ide a problémát, akkor lenne aki válaszolna a konkrét kérdésedre...

[quote:d42530e465="vicepete"]van egy csomólogfile-om alma01_20060101 alma02_20060101 alma03_20060101 alma01_20060102 alma02_20060102 alma03_20060102... stb
azt szeretném ha az alma01_20060101 alma02_20060101 alma03_20060101 egy fáljba kerüljeken az alma_20060101 -be lényeg az H ugyanazzal a dátum végződéssel legyenek, ezt hogy lehetne megoldani?

gondolom úgy, hogy kigyűjtöd a különböző végződéseket, mondjuk így:
[code:1:d42530e465]ls -1 | sed 's/.*\(.\{8\}$\)/\1/' | sort | uniq[/code:1:d42530e465]
aztán minden ilyen végződéshez kilistázod a file-okat, egybecatteled, esetleg timestamp szerint sortolod, tudomisén.

van egy csomólogfile-om alma01_20060101 alma02_20060101 alma03_20060101 alma01_20060102 alma02_20060102 alma03_20060102... stb

azt szeretném ha az alma01_20060101 alma02_20060101 alma03_20060101 egy fáljba kerüljeken az alma_20060101 -be lényeg az H ugyanazzal a dátum végződéssel legyenek, ezt hogy lehetne megoldani?

aztán van ennek folytatása...

[quote:6206d7a269="ch"][code:1:6206d7a269]
#!/bin/sh

sed -i.bak -e "s|a'|\á|" \
-e "s|e'|\é|" \
-e "s|i'|\í|" \
-e "s|o'|\ó|" \
-e "s|o:|\ö|" \
-e "s|o\"|\õ|" \
-e "s|u'|\ú|" \
-e "s|u:|\ü|" \
-e "s|u\"|\û|" $1
[/code:1:6206d7a269]

Egyébként, az ő nem utilde, hanem & #337; az ű nem ucirc, hanem & #369; a nagybetűk pedig eggyel előttük vannak. Csak azért mondom, mert tele van a magyar web kalapos u-kkal és hullámos o-kkal.

Köszi, jó, hogy szóltál, mert sajnos csak ezeket a gagyikat találtam meg, nem tudtam, hogy van ilyen is, google-el keresgéltem.

Tud segíteni Valaki Perl -ben?

szeretnék egy tetszöleges dátumhoz pl: 20051231 hozzáadni 1 napot
úgy hogy a végeredmény 20060101 legyen

[quote:548344487b="vicepete"]Tud segíteni Valaki Perl -ben?

szeretnék egy tetszöleges dátumhoz pl: 20051231 hozzáadni 1 napot
úgy hogy a végeredmény 20060101 legyen

perlhez nem értek, de szvsz ott is van unix timestamp. szóval abba átalakítod a jelenlegi dátumot, hozzáadsz 24*3600at és vissza.

[code:1:eb4bb77fd1]
use POSIX qw/strftime mktime/;

sub mkalmatime()
{
local ($in) = shift;
local $fdate,$Y,$m,$d;
($fdate) = ($in =~ /^alma_([0-9]{8})$/);
($Y,$m,$d) = ($fdate =~ /^([0-9]{4})([0-9]{2})([0-9]{2})$/);
return(0,0,0,$d,$m-1,$Y-1900);
}

sub lsdir()
{
local ($dir) = shift;
return if (!(-d $dir));
local $name;

opendir(DIR,"$dir");
for $name (readdir DIR)
{
if ($name =~ /^alma_[0-9]{8}$/)
{
&prdate("$name",3600*24);
}
}
closedir(DIR);
}

sub prdate()
{
local ($mkalma,$offs) = @_;
print strftime("%Y%m%d",localtime(mktime(&mkalmatime("$mkalma"))+$offs)) ."\n";
}

&lsdir(".");
[/code:1:eb4bb77fd1]

[quote:607a2db02b="vicepete"]alma_20051201, alma_20051202 ...
Nem lehet H a perl egy külső bash paraméterbő vegye a kezdeti dátumot?
(ugyebár az xalma tartalmazza a perl kódot)

valahogy így:
[code:1:607a2db02b]
for i in `ls alma_*|cut -c6-13|sort`
do newdate=`perl xalma`

for k in alma_$i
do cat $k > end_$newdate

done
done
[/code:1:607a2db02b]

Erre van vmi megoldás?

igen van lehetoseg. de minek shell script amikor mar ugyis perlt hasznalsz? :)

de hat te tudod... annyi az egesz, hogy pl
[code:1:607a2db02b]perl xalma "$i"[/code:1:607a2db02b]
es perlben mar tudod kezelni ARGV kent, ebben az esetben $ARGV[0] lesz perlben az $i.
amugy utolso perl script amit ideirtam neked az ezeket megcsinalja. annyi kivetellel, hogy nem nevezi at masik filera. de aztis meglehet:

[code:1:607a2db02b]
use POSIX qw/strftime mktime/;

sub mkalmatime()
{
local ($in) = shift;
local $fdate,$Y,$m,$d;
($fdate) = ($in =~ /^alma_([0-9]{8})$/);
($Y,$m,$d) = ($fdate =~ /^([0-9]{4})([0-9]{2})([0-9]{2})$/);
return(0,0,0,$d,$m-1,$Y-1900);
}

sub lsdir()
{
local ($dir) = shift;
return if (!(-d $dir));
local $name;

opendir(DIR,"$dir");
for $name (readdir DIR)
{
if ($name =~ /^alma_[0-9]{8}$/)
{
&renfile("$name",3600*24);
}
}
closedir(DIR);
}

sub renfile()
{
local ($mkalma,$offs) = @_;
local $offdate = strftime("%Y%m%d",localtime(mktime(&mkalmatime("$mkalma"))+$offs)) ;
rename("$mkalma","alma_$offdate");
}

&lsdir(".");
[/code:1:607a2db02b]

[quote:ffbcd10e67="vicepete"]Tud segíteni Valaki Perl -ben?

szeretnék egy tetszöleges dátumhoz pl: 20051231 hozzáadni 1 napot
úgy hogy a végeredmény 20060101 legyen

ezaz egyik lehetoseg
[code:1:ffbcd10e67]
use POSIX qw/strftime mktime/;
print strftime("%Y%m%d",localtime(mktime(0,0,0,31,11,105)+3600*24)) ."\n";
[/code:1:ffbcd10e67]

masik, hogy 31 hez adsz hozza egyet, bar inkabb elozo :)

[quote:261f1bb5e8="j_szucs"]sed -e 's|%%ZONE%%|limeproba.hu|' -e "s|%%IP%%|$1|" update.in | nsupdate -k $KEYFILE

Köszi, ez így királyul müxik. :)

[quote:bc0bb43da9="vicepete"]van egy csomólogfile-om alma01_20060101 alma02_20060101 alma03_20060101 alma01_20060102 alma02_20060102 alma03_20060102... stb

azt szeretném ha az alma01_20060101 alma02_20060101 alma03_20060101 egy fáljba kerüljeken az alma_20060101 -be lényeg az H ugyanazzal a dátum végződéssel legyenek, ezt hogy lehetne megoldani?

aztán van ennek folytatása...

Itt van valami, amiből ki lehet indulni:
[code:1:bc0bb43da9]#!/bin/bash
utolso=0
for i in `ls|cut -c4-12|sort`
do
if [ $i != $utolso ]; then
cat *$i>a_$i
fi
utolso=$i
done
[/code:1:bc0bb43da9]
Persze néhány részletet át kell írni a problémának megfelelően. :-)
(Ebben a változatban a filenevek: a1_20060101, a2_20060101 stb.)
De ez tényleg csak egy v.mi amiből ki lehet indulni, nem egy kész shellscript.

[code:1:7a7499d6d8]
#!/bin/sh

KEYFILE=Klimeproba.hu.+157+40337.private

sed -e 's|%%ZONE%%|limeproba.hu|' -e 's|%%IP%%|$1|' update.in | nsupdate -k $KEYFILE
[/code:1:7a7499d6d8]

Ez egy olyan script akar lenni, ami egy TSIG dinamikus zónát frissít, és majdnem működik is, csak az a baj vele, hogy a $1 helyére mivel sed parancsban vannak, nem kerül be a paraméter. Nincs valakinek valami ötlete, hogyan lehetne ezt megoldani?
Előre is köszi.

Na igen az szép lenne 20051232 :)

köszi erre gondoltam én is, de hogy lesz az alma_20051231 -ből (0,0,0,31,11,105), mert ugye alma_20051201 -től alma_20051231 -ig vannak a fileok.

[code:1:d8accd8114]perl -e'use POSIX qw/strftime mktime/;
print strftime("%Y%m%d",localtime(mktime(0,0,0,31,11,105)+3600*24)) ."\n";'[/code:1:d8accd8114]

[code:1:af1295f4ea]
use POSIX qw/strftime mktime/;

sub mkalmatime()
{
local ($in) = shift;
local $fdate,$Y,$m,$d;
($fdate) = ($in =~ /^alma_([0-9]{8})$/);
($Y,$m,$d) = ($fdate =~ /^([0-9]{4})([0-9]{2})([0-9]{2})$/);
return(0,0,0,$d,$m-1,$Y-1900);
}

print strftime("%Y%m%d",localtime(mktime(&mkalmatime("alma_20051231"))+3600*24));
[/code:1:af1295f4ea]

...nalad gyorsabb lenne (hacsak a nap valtozik) for ciklus..

azt hogy hozzadj naphoz egyet azt igy ertettem:
print strftime("%Y%m%d",localtime(mktime(0,0,0,31+1,11,105))) ."\n";

de tied sem rossz megoldas :) 32 telleg jol allna napkent.

sed -e 's|%%ZONE%%|limeproba.hu|' -e "s|%%IP%%|$1|" update.in | nsupdate -k $KEYFILE

hát ez érdekesen működik... volt 3 alma file-om aztán 2 lett belőle...

A perl H nézne ki véglegesen, ha $i paraméterből kapná a dátumot aztán visszaadná egy vátozónak, mint ahogy leírtam?

[code:1:c5aea7d08a]

for i in `ls alma_*|cut -c6-13|sort`
do newdate=`perl xalma`

for k in alma_$i
do cat $k > end_$newdate

done
done [/code:1:c5aea7d08a]

Na igen így akár lehetne május 40 is :)

De hogy tudom megadni h file nevét paraméterben? Hogy ne kelljen beírni hogy : "alma_20051231"

[code:1:4e8cf17b82]
print strftime("%Y%m%d",localtime(mktime(&mkalmatime("alma_20051231"))+3600*24));[/code:1:4e8cf17b82]

Hali,

megint egy kis sed-es help kéne. Egy olyan scriptet szeretnék, ami a paraméterként megadott fájlban a "repülő ékezetes" karaktereket kicserélni rendes HTML-kódolásra. Hirtelen valami ilyen jutott eszembe:

[code:1:e3601b6a56]
#!/bin/sh

sed -i.bak -e "s|a'|\á|" \
-e "s|e'|\é|" \
-e "s|i'|\í|" \
-e "s|o'|\ó|" \
-e "s|o:|\ö|" \
-e "s|o\"|\õ|" \
-e "s|u'|\ú|" \
-e "s|u:|\ü|" \
-e "s|u\"|\û|" $1
[/code:1:e3601b6a56]

Viszont ez hol kciseréli, hol nem. Miután lefuttatom, a fájlban még maradt csomó kicseréltetlen szöveg.

[quote:a50673431b="Beanie"]Hali,

megint egy kis sed-es help kéne. Egy olyan scriptet szeretnék, ami a paraméterként megadott fájlban a "repülő ékezetes" karaktereket kicserélni rendes HTML-kódolásra. Hirtelen valami ilyen jutott eszembe:

[code:1:a50673431b]
#!/bin/sh

sed -i.bak -e "s|a'|\á|" \
-e "s|e'|\é|" \
-e "s|i'|\í|" \
-e "s|o'|\ó|" \
-e "s|o:|\ö|" \
-e "s|o\"|\õ|" \
-e "s|u'|\ú|" \
-e "s|u:|\ü|" \
-e "s|u\"|\û|" $1
[/code:1:a50673431b]

Viszont ez hol kciseréli, hol nem. Miután lefuttatom, a fájlban még maradt csomó kicseréltetlen szöveg.

És a nagybetûk?
(pl. "s/A'/\&Aacute\;/g" stb.)

Sziasztok!

S.O.S. segítség kellene Shell Script írásban!!!

Aki tud segíteni az írjon mailt, vagy keressen meg MSN-n vagy ICQ-n

Köszi

Esetleg mert hiányzik a g flag. Próbáld így:
[code:1:2778d4cc5d]
sed -i.bak -e "s|a'|\á|g" \
[/code:1:2778d4cc5d]

Ahogy mbaron írta úgy jó, köszi. Nagybetűk nem nagyon vannak benne, azokat általában már egyből jól írom be. Ez egy fordítási projekthez kell amúgy, az angol változatot írom át, csak ha á,é, stb-t írok bele azt nem tudom konzolból sed-del kicserélni, így ez az átmeneti megoldás marad, sed-del jól fel tudom dolgozni ezt.

alma_20051201, alma_20051202 ...
Nem lehet H a perl egy külső bash paraméterbő vegye a kezdeti dátumot?
(ugyebár az xalma tartalmazza a perl kódot)

valahogy így:
[code:1:9f01cd15d6]
for i in `ls alma_*|cut -c6-13|sort`
do newdate=`perl xalma`

for k in alma_$i
do cat $k > end_$newdate

done
done
[/code:1:9f01cd15d6]

Erre van vmi megoldás?

Köszönöm az eddigi segítséget

a másik kérdésemben is tud valaki segíteni?

vanak ugyebár mostmár alma_20060101, alma_20060102, alma_20060103 ... stb file-ok ezek lennének a keresési fájlok
a korte_20060102, korte_20060103, korte_20060104 ... stb file-ban

a bibi csak az H a korte_20060102 -es fileban kell keresni a alma_20060101 -es filet de a végén end_20060101 ként akarnám elmenteni...

grep -f alma_20060101 korte_20060102 > end_20060101

Erre tud vki mondani vmit?