/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Bash scripting...
Fra : Brian Ipsen


Dato : 03-07-03 10:15

Hej!

Hvordan får man sepereret et domæne-navn ud fra et TLD i et bash script ?

Hvis jeg feks angiver: domain.dk (enten som kommando-linie parameter eller
som en variabel inde i scriptet), så skal jeg i scriptet kunne få fjernet
..dk og så have en variable med "domain" i ... Og det skal selvfølgelig også
virke på .se/.com/.org etc ....

Mvh.

/Brian




 
 
Thomas Rasmussen (03-07-2003)
Kommentar
Fra : Thomas Rasmussen


Dato : 03-07-03 10:27

"Brian Ipsen" <bipsen@andebakken.dk> writes:

> Hej!
>
> Hvordan får man sepereret et domæne-navn ud fra et TLD i et bash script ?
>
> Hvis jeg feks angiver: domain.dk (enten som kommando-linie parameter eller
> som en variabel inde i scriptet), så skal jeg i scriptet kunne få fjernet
> .dk og så have en variable med "domain" i ... Og det skal selvfølgelig også
> virke på .se/.com/.org etc ....

Umiddelbart ville jeg nok anvende awk:

echo "domain.dk" | awk -F"." {'print $1'}
domain

Med lidt udvidelse vil den måske også kunne bruges til at understøtte
subdomains (altså ala my.domain.dk).

/Thomas

--
/"\ | Human Knowledge Belongs To The World
\ / | -- Milo Hoffman in "AntiTrust"
x |
/ \ <-- (ASCII Ribbon Campain against html emails and postings!)

Peter Jensen (03-07-2003)
Kommentar
Fra : Peter Jensen


Dato : 03-07-03 14:25

Thomas Rasmussen wrote:

>> Hvordan får man sepereret et domæne-navn ud fra et TLD i et bash script ?
>>
>> Hvis jeg feks angiver: domain.dk (enten som kommando-linie parameter eller
>> som en variabel inde i scriptet), så skal jeg i scriptet kunne få fjernet
>> .dk og så have en variable med "domain" i ... Og det skal selvfølgelig også
>> virke på .se/.com/.org etc ....
>
> Umiddelbart ville jeg nok anvende awk:
>
> echo "domain.dk" | awk -F"." {'print $1'}
-------------------^^

Det mener du ikke, vel?

Det du gør med 'awk' er jo egentligt hvad 'cut' er beregnet til. Nærmere
betegnet svarer det til 'cut -d"." -f 1'.

> Med lidt udvidelse vil den måske også kunne bruges til at understøtte
> subdomains (altså ala my.domain.dk).

Lad os nu lige udnytte at vi rent faktisk er i bash her ...

Hvis domænenavnet nu ligger i variablen DOMAIN, så vil ${DOMAIN%.*} give
dig hvad du har brug for. Bash kan rent faktisk lave ganske meget simpel
tekstmanipulering. Alt er beskrevet i 'man bash'.

--
PeKaJe

The reason computer chips are so small is computers don't eat much.

sv-e (03-07-2003)
Kommentar
Fra : sv-e


Dato : 03-07-03 14:48

Peter Jensen wrote:
>>Thomas Rasmussen wrote:
>>Umiddelbart ville jeg nok anvende awk:
>>
>>echo "domain.dk" | awk -F"." {'print $1'}
>
> -------------------^^
>
> Det mener du ikke, vel?
>
> Det du gør med 'awk' er jo egentligt hvad 'cut' er beregnet til. Nærmere
> betegnet svarer det til 'cut -d"." -f 1'.
>
>
Hej
I hvilken bog står skrevet at det er mere rigtigt at bruge cut, istedet
for awk ?

Det må da vist være en smagsag, og ikke en fejl

vh
sv-e


Peter Jensen (03-07-2003)
Kommentar
Fra : Peter Jensen


Dato : 03-07-03 15:15

sv-e wrote:

>>> echo "domain.dk" | awk -F"." {'print $1'}
>>
>> -------------------^^
>>
>> Det mener du ikke, vel?
>>
>> Det du gør med 'awk' er jo egentligt hvad 'cut' er beregnet til.
>> Nærmere betegnet svarer det til 'cut -d"." -f 1'.
>
> I hvilken bog står skrevet at det er mere rigtigt at bruge cut,
> istedet for awk ?

Af princip foretrækker jeg altid at bruge værktøjerne til det de er
bedst til. Vi ved ikke meget om target systemet eller hvor meget RAM der
er til rådighed. På en given distribution er der større sansynlighed for
at 'textutils' er installeret end for at 'gawk' er installeret. 'awk'
har også et memory footprint der er ca. 15,7 gange større end det
tilsvarende for 'cut'. I situationer hvor processen skal udføres mange
gange i træk kan det blive et problem for 'awk'.

En lille benchmark jeg lige lavede viser forresten også at 'cut' er ca.
20% hurtigere end 'awk' i netop denne opgave. Noget helt andet er så at
mit andet forslag med den indbyggede tekst-klipper er ca. 60 gange
hurtigere end 'awk', så hverken 'awk' eller 'cut' er gode løsninger her ...

> Det må da vist være en smagsag, og ikke en fejl

Den "fejl" jeg påpeger skyldes en lille finurlighed, som jeg har
forklaret andetsteds. Det så virkeligt ud som om at han havde skrevet en
'||' i stedet for en '|'. I hvert fald når jeg redigerede mit svar.

--
PeKaJe

What, after all, is a halo? It's only one more thing to keep clean.
      -- Christopher Fry

Mogens Kjaer (03-07-2003)
Kommentar
Fra : Mogens Kjaer


Dato : 03-07-03 17:27

Peter Jensen wrote:
....
> Af princip foretrækker jeg altid at bruge værktøjerne til det de er
> bedst til. Vi ved ikke meget om target systemet eller hvor meget RAM der
> er til rådighed. På en given distribution er der større sansynlighed for
> at 'textutils' er installeret end for at 'gawk' er installeret. 'awk'
> har også et memory footprint der er ca. 15,7 gange større end det
> tilsvarende for 'cut'. I situationer hvor processen skal udføres mange
> gange i træk kan det blive et problem for 'awk'.
>
> En lille benchmark jeg lige lavede viser forresten også at 'cut' er ca.
> 20% hurtigere end 'awk' i netop denne opgave. Noget helt andet er så at
> mit andet forslag med den indbyggede tekst-klipper er ca. 60 gange
> hurtigere end 'awk', så hverken 'awk' eller 'cut' er gode løsninger her ...

Fordelen med awk er, at hvis man pludselig får behov for at pille
"domain" ud af både "domain.dk", "gulerod.domain.dk", etc. kan
det nemt laves om til:

echo "gulerod.domain.dk" | awk -F"." {'print $(NF-1)'}

Dine performance vurderinger er sikkert rigtige, men jeg
tvivler på at det har nogen praktisk betydning...

Mogens


--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk


Peter Jensen (03-07-2003)
Kommentar
Fra : Peter Jensen


Dato : 03-07-03 20:00

Mogens Kjaer wrote:

>> En lille benchmark jeg lige lavede viser forresten også at 'cut' er
>> ca. 20% hurtigere end 'awk' i netop denne opgave. Noget helt andet er
>> så at mit andet forslag med den indbyggede tekst-klipper er ca. 60
>> gange hurtigere end 'awk', så hverken 'awk' eller 'cut' er gode
>> løsninger her ...
>
> Fordelen med awk er, at hvis man pludselig får behov for at pille
> "domain" ud af både "domain.dk", "gulerod.domain.dk", etc. kan det
> nemt laves om til:
>
> echo "gulerod.domain.dk" | awk -F"." {'print $(NF-1)'}
>
> Dine performance vurderinger er sikkert rigtige, men jeg tvivler på at
> det har nogen praktisk betydning...

Vil du påstå at 60 *ganges* hastighedsforskel ikke betyder noget? Hvad
hvis der skulle behandles millioner af den slags? Den eneste forsvarlige
metode til at løse det oprindelige problem er at bruge ${VARIABEL%.*},
hvor VARIABEL indeholder domænet som skal behandles. Man kan lige så
godt lære god teknik med det samme. På den måde virker det mere
naturligt når man skal lave noget hvor det virkeligt gør en forskel.

Til at løse det nye problem kan man bruge:
---
TMP=${VARIABEL%.*}
${TMP##*.}
---

Det måler jeg til at være ca. 40 gange hurtigere end metoden med 'awk'.
Husk altid at det tager relativt lang tid at spawne en process, så udnyt
den der allerede kører.

Dette skal forresten på ingen måde ses som om at jeg ikke anbefaler
'awk'. Den er helt genial til komplicerede parsing opgaver. Jeg ser bare
gerne helst at folk bruger det rigtige værktøj til opgaven, specielt når
den er så simpel som oprindeligt stillet.

--
PeKaJe

You never know what is enough until you know what is more than enough.
      -- William Blake

Mogens Kjaer (04-07-2003)
Kommentar
Fra : Mogens Kjaer


Dato : 04-07-03 07:19

Peter Jensen wrote:
....
> Vil du påstå at 60 *ganges* hastighedsforskel ikke betyder noget?
....

Ja, hvis awk bare er en lille del af et script.

Hvis dette script skal behandle millioner af linier så er
awk/cut/bash tidsforskellen nok forsvindende i forhold til resten.

Mogens

--
Mogens Kjaer, Carlsberg A/S, Computer Department
Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
Email: mk@crc.dk Homepage: http://www.crc.dk


Peter Jensen (04-07-2003)
Kommentar
Fra : Peter Jensen


Dato : 04-07-03 20:01

Mogens Kjaer wrote:

>> Vil du påstå at 60 *ganges* hastighedsforskel ikke betyder noget?
>
> Ja, hvis awk bare er en lille del af et script.

Det gav OP ingen indikation af. Med den givne information er det bedst
at give det universelt bedste råd. Den oprindelige løsning med awk
virker forresten heller ikke når der er et subdomæne. Det gør bash
løsningen, og den gør det hurtigere. Kan du pege på bare en *ulempe* ved
at bruge bash løsningen?

> Hvis dette script skal behandle millioner af linier så er awk/cut/bash
> tidsforskellen nok forsvindende i forhold til resten.

Måske, men jeg kunne godt forestille mig en situation hvor scriptet var
på 10-20 linjer, men skulle behandle et meget stort antal domænenavne.
F.eks. til analyse af en weblog. Men selv hvis scriptet var på mange
millioner linjer, tror du så ikke det ville være smart at bruge den
hurtigste løsning *overalt*?

Jeg opfordrer bare til god programmeringsteknik, det er alt. Jeg er ikke
en kode-karl, men en ingeniør. Det forklarer måske lidt min holdning.

--
PeKaJe

There is no likelihood man can ever tap the power of the atom.
      -- Robert Millikan, Nobel Prize in Physics, 1923

Peter Jensen (03-07-2003)
Kommentar
Fra : Peter Jensen


Dato : 03-07-03 14:53

Peter Jensen wrote:

>> echo "domain.dk" | awk -F"." {'print $1'}
> -------------------^^
>
> Det mener du ikke, vel?

Beklager, men af en eller anden underlig grund så viser 'vim' den pipe
som en 'or', altså '||'.

En nærmere undersøgelse viser at der rent faktisk står '|' efterfulgt af
ASCII 160. Det viser 'vim' som en blå pipe efterfulgt af et mellemrum.
Når jeg så også havde blå syntax highlighting på lige netop den del, så
kan du vel nok forstå min forvirring

--
PeKaJe

Booker's Law:
   An ounce of application is worth a ton of abstraction.

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste