|
| 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 |
| | |
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
| |
|
|