/ 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 og indsætte en '
Fra : JoeDoe


Dato : 09-09-09 07:07

Hej alle.

Jeg har følgende tekst:

10.1.1.1 Text#1 Number#1
10.1.1.2 Text#2 Number#2

Jeg har brug for at linien ser sådan her ud:

var(1) = "10.1.1.1" ' Text#1
var(2) = "10.1.1.2" ' Text#2

Jeg benytter denne AWK:

cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\""}'

Det giver mig det meste, men hvordan pokker får jeg indsat en Visual
Basic kommentar ' !?

Hvis jeg har denne:
cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \' "
$2}'

... kommer der bare en prompt med > - sikkert fordi ' er kode-tegnet i
awk?

 
 
Klaus Alexander Seis~ (09-09-2009)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 09-09-09 14:45

JoeDoe skrev:

> hvordan pokker får jeg indsat en Visual Basic kommentar ' !?

Sæt $ foran allerførste ' og escape den der bliver brugt til kommentar:

#v+

$ echo foo bar | awk $'{print $1 "\t\' " $2}'
foo   ' bar
$

#v-

Mvh,

--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/

JoeDoe (09-09-2009)
Kommentar
Fra : JoeDoe


Dato : 09-09-09 23:32

> > hvordan pokker får jeg indsat en Visual Basic kommentar ' !?
>
> Sæt $ foran allerførste ' og escape den der bliver brugt til kommentar:
>
> $ echo foo bar | awk $'{print $1 "\t\' " $2}'
> foo     ' bar

Det giver ikke helt det ønskede resultat:

var(1) = $1 ' Text#1
var(2) = $1 ' Text#2

Jeg fik ganske vist VB-kommentar tegnet med nu men " er ikke længere
om IP adressen og IP adressen er erstattet af $1.

Thorbjørn Ravn Ander~ (10-09-2009)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 10-09-09 06:42

JoeDoe skrev:

> Hvis jeg har denne:
> cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \' "
> $2}'
>
> .. kommer der bare en prompt med > - sikkert fordi ' er kode-tegnet i
> awk?

Det er et sh problem - du har et ulige antal '-tegn.

Prøv at lave dit program i en fil i stedet for på kommandolinien. Det
letter meget når man først er havnet i det problem.


--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"

JoeDoe (10-09-2009)
Kommentar
Fra : JoeDoe


Dato : 10-09-09 00:37

> > Hvis jeg har denne:
> > cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \' "
> > $2}'
>
> > .. kommer der bare en prompt med > - sikkert fordi ' er kode-tegnet i
> > awk?
>
> Det er et sh problem - du har et ulige antal '-tegn.
>
> Prøv at lave dit program i en fil i stedet for på kommandolinien.  Det
> letter meget når man først er havnet i det problem.

Men det vil være helt uinteressant for mig, at skulle have et script
for dét. Hvis ikke det kan laves i en one-liner i /bin/sh vil jeg
hellere undlade kommentar tegnet - men jeg tvivler da meget på, at det
er umuligt?

Thorbjørn Ravn Ander~ (11-09-2009)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 11-09-09 11:35

JoeDoe skrev:
>>> Hvis jeg har denne:
>>> cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \' "
>>> $2}'
>>> .. kommer der bare en prompt med > - sikkert fordi ' er kode-tegnet i
>>> awk?
>> Det er et sh problem - du har et ulige antal '-tegn.
>>
>> Prøv at lave dit program i en fil i stedet for på kommandolinien. Det
>> letter meget når man først er havnet i det problem.
>
> Men det vil være helt uinteressant for mig, at skulle have et script
> for dét. Hvis ikke det kan laves i en one-liner i /bin/sh vil jeg
> hellere undlade kommentar tegnet - men jeg tvivler da meget på, at det
> er umuligt?

Naturligvis er det ikke umuligt, men det er meget nemmere at få til at
virke som en one-liner når du først HAR et program der gør det du vil.

Indtil videre kan du se at du har siddet fast på, at du ikke kender
reglerne for håndtering af apostrof og gåseøjne i sh, og hvor sjovt er
DET lige?
--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"

Klaus Alexander Seis~ (10-09-2009)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 10-09-09 08:18

JoeDoe skrev:

> Jeg fik ganske vist VB-kommentar tegnet med nu men " er ikke længere
> om IP adressen og IP adressen er erstattet af $1.

Så må du læse manualen, bash(1), og se hvordan du får escapet " og '.
Dit problem skyldes sh/bash, ikke awk.

Mvh,

--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/

Tom G. Christensen (10-09-2009)
Kommentar
Fra : Tom G. Christensen


Dato : 10-09-09 09:27

JoeDoe wrote:
> Hej alle.
>
> Jeg har følgende tekst:
>
> 10.1.1.1 Text#1 Number#1
> 10.1.1.2 Text#2 Number#2
>
> Jeg har brug for at linien ser sådan her ud:
>
> var(1) = "10.1.1.1" ' Text#1
> var(2) = "10.1.1.2" ' Text#2
>
> Jeg benytter denne AWK:
>
> cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\""}'
>
> Det giver mig det meste, men hvordan pokker får jeg indsat en Visual
> Basic kommentar ' !?
>
> Hvis jeg har denne:
> cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \' "
> $2}'
>
Se:
http://www.gnu.org/manual/gawk/html_node/Quoting.html

$ cat textfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\"" " '\'' "
$2}'
var(1) = "10.1.1.1" ' Text#1
var(2) = "10.1.1.2" ' Text#2

-tgc

JoeDoe (10-09-2009)
Kommentar
Fra : JoeDoe


Dato : 10-09-09 05:42

> > Jeg har følgende tekst:
>
> > 10.1.1.1 Text#1 Number#1
> > 10.1.1.2 Text#2 Number#2
>
> > Jeg har brug for at linien ser sådan her ud:
>
> > var(1) = "10.1.1.1" ' Text#1
> > var(2) = "10.1.1.2" ' Text#2
>
> > Jeg benytter denne AWK:
>
> > cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\""}'
>
> > Det giver mig det meste, men hvordan pokker får jeg indsat en Visual
> > Basic kommentar ' !?
>
> > Hvis jeg har denne:
> > cat mytextfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \' "
> > $2}'
>
> Se:http://www.gnu.org/manual/gawk/html_node/Quoting.html
>
> $ cat textfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\"" " '\'' "
> $2}'
> var(1) = "10.1.1.1" ' Text#1
> var(2) = "10.1.1.2" ' Text#2

Se bare - der ér en løsning mange mange tak Tom, det virker
perfekt. Ikke at jeg forstår hvorfor det lige skal være sådan, men det
fungere og det er hovedsagen.

Frank Damgaard (10-09-2009)
Kommentar
Fra : Frank Damgaard


Dato : 10-09-09 15:32

JoeDoe wrote:
.....

>> Se:http://www.gnu.org/manual/gawk/html_node/Quoting.html
>>
>> $ cat textfile | awk '{FS=" ";i+=1;print "var("i") = \"" $1"\"" " '\'' "
>> $2}'
>> var(1) = "10.1.1.1" ' Text#1
>> var(2) = "10.1.1.2" ' Text#2
>
> Se bare - der ér en løsning mange mange tak Tom, det virker
> perfekt. Ikke at jeg forstår hvorfor det lige skal være sådan, men det
> fungere og det er hovedsagen.

til en anden gang, problemet er hvornår og hvad der læser escape tegn \ og
tegnene til streng start/slut som " og '.
Dvs. er det sh eller awk , og så skal man fixe det det rette sted.

Så det ovenstående gør er egentlig at lave 2 tekststrenge med et tegn
imellem. Men for at sh ikke skal fortolke det midterste tegn ' som en ny
streng får den et \ foran.

dvs. 3 sæt tekst :
'{FS=" ";i+=1;print "var("i") = \"" $1"\"" " '
\'
'"$2}'

I stedet for midterste \' kunne man også have brugt "'" :

awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" '"'"' "$2}'

men man kunne også helt undgå ' i strengen og indsætte hex eller octal værdi
som \47 eller \047, men det vik afhænge af programmet (her awk) om man
kan dette:

awk '{FS=" ";i+=1;print "var("i") = \"" $1"\" \047 "$2}'


N/A (10-09-2009)
Kommentar
Fra : N/A


Dato : 10-09-09 15:32



N/A (11-09-2009)
Kommentar
Fra : N/A


Dato : 11-09-09 11:35



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

Månedens bedste
Årets bedste
Sidste års bedste