/ 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
awk, split() og regular expressions ?
Fra : Brian Ipsen


Dato : 20-01-02 13:35

Hej!

Jeg er ved at prøve at lave noget automatisering i set script, hvor
der skal håndteres nogle nøgler til Bind9. Problemet er, at jeg skal
have fat i den streng, som indeholder selve nøglen - resten i filen er
jeg ligeglad med

Indholdet af filen kan f.eks. se sådan her ud:

rndc. IN KEY 0 2 157 sv6IkGq1Vprm4edJUGhmJg==

Jeg prøver så med:

cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[7] }'

Men jeg får ikke nøglen "sv6IkGq1Vprm4edJUGhmJg==" retur - hvad gør
jeg galt ??

/Brian

 
 
Jesper Skriver (20-01-2002)
Kommentar
Fra : Jesper Skriver


Dato : 20-01-02 14:05

On Sun, 20 Jan 2002 13:35:28 +0100, Brian Ipsen wrote:
> Hej!
>
> Jeg er ved at prøve at lave noget automatisering i set script, hvor
> der skal håndteres nogle nøgler til Bind9. Problemet er, at jeg skal
> have fat i den streng, som indeholder selve nøglen - resten i filen er
> jeg ligeglad med
>
> Indholdet af filen kan f.eks. se sådan her ud:
>
> rndc. IN KEY 0 2 157 sv6IkGq1Vprm4edJUGhmJg==
>
> Jeg prøver så med:
>
> cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[7] }'
>
> Men jeg får ikke nøglen "sv6IkGq1Vprm4edJUGhmJg==" retur - hvad gør
> jeg galt ??

Den første hedder 0, ikke 1, så prøv med

cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[6] }'

--
Jesper Skriver, CCIE #5456
FreeBSD committer

Brian Ipsen (20-01-2002)
Kommentar
Fra : Brian Ipsen


Dato : 20-01-02 14:16

On 20 Jan 2002 13:05:04 GMT, Jesper Skriver <harvest@wheel.dk> wrote:

>> cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[7] }'
>>
>> Men jeg får ikke nøglen "sv6IkGq1Vprm4edJUGhmJg==" retur - hvad gør
>> jeg galt ??
>
>Den første hedder 0, ikke 1, så prøv med
>
>cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[6] }'

Det får jeg ikke noget output fra (bortset fra en newline (ASCII 10))

/Brian

Klaus Alexander Seis~ (20-01-2002)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 20-01-02 15:22

Brian Ipsen skrev:

> Indholdet af filen kan f.eks. se sådan her ud:
>
> rndc. IN KEY 0 2 157 sv6IkGq1Vprm4edJUGhmJg==
>
> Jeg prøver så med:
>
> cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[7] }'

Man kan vel nøjes med "awk '{print $7}' < Krndc.+157+33846.key" -
det andet ser så omstændeligt ud.

Den $1 du refererer til er det første blanktegnsafgrænsede ord på
linjen, og da awk selv splitter linjen op, er der ingen grund til
at gå til yderligheder som split().


// Klaus

--
><>    vandag, môre, altyd saam

Brian Ipsen (20-01-2002)
Kommentar
Fra : Brian Ipsen


Dato : 20-01-02 15:40

On Sun, 20 Jan 2002 15:22:07 +0100, Klaus Alexander Seistrup
<spamtrap@magnetic-ink.dk> wrote:

>> Indholdet af filen kan f.eks. se sådan her ud:
>>
>> rndc. IN KEY 0 2 157 sv6IkGq1Vprm4edJUGhmJg==
>>
>> Jeg prøver så med:
>>
>> cat Krndc.+157+33846.key | awk '{ split($1,t," ");print t[7] }'
>
>Man kan vel nøjes med "awk '{print $7}' < Krndc.+157+33846.key" -
>det andet ser så omstændeligt ud.
>
>Den $1 du refererer til er det første blanktegnsafgrænsede ord på
>linjen, og da awk selv splitter linjen op, er der ingen grund til
>at gå til yderligheder som split().

Ahh.... min redningsmand - det virker jo bare.... Ok, jeg var ikke
lige klar over hvordan det blev behandlet af awk, men er nu blevet en
smule klogere (forhåbentlig )

/Brian


frank damgaard (20-01-2002)
Kommentar
Fra : frank damgaard


Dato : 20-01-02 17:50

Brian Ipsen <Spammers@blow.me> wrote:
......
> Ahh.... min redningsmand - det virker jo bare.... Ok, jeg var ikke
> lige klar over hvordan det blev behandlet af awk, men er nu blevet en
> smule klogere (forhåbentlig )

Hvis du vil vide lidt mere om AWK så se på
http://www.sslug.dk/julekalender/23.php3
(kommer nok til at hedde http://www.sslug.dk/julekalender/2001/23.php3
i fremtiden)



--
no signature :)

Peter Makholm (21-01-2002)
Kommentar
Fra : Peter Makholm


Dato : 21-01-02 19:58

Brian Ipsen <Spammers@blow.me> writes:

> rndc. IN KEY 0 2 157 sv6IkGq1Vprm4edJUGhmJg==

Du har fået svar, men hvorfor awk? Hvorfor ikke bare:

$ cut -d" " -f 7

(Kan også skrives 'cut -d\ -f7', men det er så utydeligt)


--
Når folk spørger mig, om jeg er nørd, bliver jeg altid ilde til mode
og svarer lidt undskyldende: "Nej, jeg bruger RedHat".
-- Allan Olesen på dk.edb.system.unix

Klaus Alexander Seis~ (21-01-2002)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 21-01-02 20:53

Peter Makholm skrev:

> Du har fået svar, men hvorfor awk? Hvorfor ikke bare:
>
> $ cut -d" " -f 7

Jeg bliver nysgerrig: hvorfor _ikke_ awk? Man sparer ganske vist to
tastetryk ved at skrive 'cut -d" " -f 7' fremfor "awk '{print $7}'",
men jeg synes at awk-udtrykket er mere læsbart. Men det er måske
bare fordi jeg er vant til at bruge awk?


// Klaus

--
><>    vandag, môre, altyd saam

Kent Friis (21-01-2002)
Kommentar
Fra : Kent Friis


Dato : 21-01-02 21:10

Den Mon, 21 Jan 2002 20:53:08 +0100 skrev Klaus Alexander Seistrup:
>Peter Makholm skrev:
>
>> Du har fået svar, men hvorfor awk? Hvorfor ikke bare:
>>
>> $ cut -d" " -f 7
>
>Jeg bliver nysgerrig: hvorfor _ikke_ awk? Man sparer ganske vist to
>tastetryk ved at skrive 'cut -d" " -f 7' fremfor "awk '{print $7}'",
>men jeg synes at awk-udtrykket er mere læsbart. Men det er måske
>bare fordi jeg er vant til at bruge awk?

1. Du er vant til at bruge awk. Awk-syntax bliver meget nemt komplet
ulæselig.

2. cut er et lille simpelt program der klarer en opgave godt. awk er
faktisk en komplet fortolker, og vil i de fleste tilfælde være
overkill.

Mvh
Kent
--
Der' ingen bånd der binder mig
ingen holder på mig, nej...

Klaus Alexander Seis~ (21-01-2002)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 21-01-02 21:33

Kent Friis skrev:

> 1. Du er vant til at bruge awk. Awk-syntax bliver meget nemt
> komplet ulæselig.

Det kan vi ikke blive uenige i, men i det konkrete tilfælde synes jeg
faktisk at awk-udtrykket er det mest læsevenlige ("print det 7. ord"),
derfor undrede det mig at Peter sagde "bare" om cut, hvor man skal
angive feltadskilleren (hvis nu blanktegnene i Brians fil var en skøn
blanding af tabulatortegn og mellemrum, ville Peters cut-sætning slet
ikke virke, ville den?).

> 2. cut er et lille simpelt program der klarer en opgave godt.
> awk er faktisk en komplet fortolker, og vil i de fleste
> tilfælde være overkill.

Det kan vi heller ikke være uenige om, men man er jo ikke tvunget til
at bruge awk på en kompliceret måde. Hvis jeg bare skal have pillet
nogle felter ud af en række poster, så synes jeg awk er dejlig let at
gå til - og har en læsbar syntax. Det har/er cut sikkert osse hvis
man er vant til at bruge den (det er jeg ikke).


// Klaus

--
><>    vandag, môre, altyd saam

Kent Friis (21-01-2002)
Kommentar
Fra : Kent Friis


Dato : 21-01-02 22:09

Den Mon, 21 Jan 2002 21:33:13 +0100 skrev Klaus Alexander Seistrup:
>Kent Friis skrev:
>
>> 1. Du er vant til at bruge awk. Awk-syntax bliver meget nemt
>> komplet ulæselig.
>
>Det kan vi ikke blive uenige i, men i det konkrete tilfælde synes jeg
>faktisk at awk-udtrykket er det mest læsevenlige ("print det 7. ord"),
>derfor undrede det mig at Peter sagde "bare" om cut, hvor man skal
>angive feltadskilleren (hvis nu blanktegnene i Brians fil var en skøn
>blanding af tabulatortegn og mellemrum, ville Peters cut-sætning slet
>ikke virke, ville den?).

Nej, og derfor er det nemmere at bruge enten awk eller "set -- $i" i
det tilfælde.

>> 2. cut er et lille simpelt program der klarer en opgave godt.
>> awk er faktisk en komplet fortolker, og vil i de fleste
>> tilfælde være overkill.
>
>Det kan vi heller ikke være uenige om, men man er jo ikke tvunget til
>at bruge awk på en kompliceret måde. Hvis jeg bare skal have pillet
>nogle felter ud af en række poster, så synes jeg awk er dejlig let at
>gå til - og har en læsbar syntax. Det har/er cut sikkert osse hvis
>man er vant til at bruge den (det er jeg ikke).

Hvis det er flere felter det drejer sig om, så er cut meget nemmere
end awk:

cut -d: -f2-4,6,8-

altså: delimiter er ":", og vi skal bruge felt 2,3,4,6,8,9,10...
(læses: felt to til fire, felt seks og felt otte til slutningen af
linien).

Mvh
Kent
--
Der' ingen bånd der binder mig
ingen holder på mig, nej...

Klaus Alexander Seis~ (22-01-2002)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 22-01-02 07:13

Kent Friis skrev:

> Nej, og derfor er det nemmere at bruge enten awk eller "set -- $i"
> i det tilfælde.

Ah, "set", den glemmer jeg for det meste...

> cut -d: -f2-4,6,8-
>
> altså: delimiter er ":", og vi skal bruge felt 2,3,4,6,8,9,10...

Ja, det kan jeg godt se er en hel del nemmere end awk - især hvis man
skal pille mange felter ud.


// Klaus

--
><>    vandag, môre, altyd saam

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

Månedens bedste
Årets bedste
Sidste års bedste