Avatar billede dank Nybegynder
07. oktober 2002 - 22:10 Der er 7 kommentarer og
1 løsning

behandle streng

Hey - et shell script returnerer denne streng

f.eks. "1/10" eller "2/10" o.s.v.

Jeg mangler en metode til at "greppe" det der står foran "/" så resultatet bliver "1" eller "2" o.s.v.

Det skulle gerne være muligt at starte dette script fra en shell konsol, f.eks. med

perl bla bla

Nogen der kan hjælpe?
Avatar billede jespernaur Nybegynder
07. oktober 2002 - 22:27 #1
Kan du ikke bare sende resultatet af dit shell script ind i grep med |, altså noget i retning af

  ditscript | grep "^[0-9]+"

Mvh
Jesper Naur
Avatar billede dank Nybegynder
07. oktober 2002 - 22:38 #2
Tjaaee.. Det virker ikke rigtigt.. Kan du se hvad jeg gør galt? Jeg har

tail -n 20 /var/log/qmail/current | grep "10 remote" | tail -n 1 |  awk -- ' $5 { print $6 }' | grep "^[0-9]+"

Uden grep giver den resultatet "0/20" med grep giver den intet resultat :o/
Avatar billede dank Nybegynder
07. oktober 2002 - 22:41 #3
det lykkedes med:

cut -d/ -f1

Du får point som tak for hjælpen i alle tilfælde :o]
Avatar billede jespernaur Nybegynder
07. oktober 2002 - 23:35 #4
Så vidt jeg kan se, er du ude i lidt voldsomt overkill mht de programmer du bringer i sving!  I kraft af, at du overhovedet har awk i gang, ville jeg tro at et passende awk-script burde kunne løse dit problem, og at hele sekvensen grep-tail-(grep eller cut) er inderligt overflødig. Jeg vil med andre ord hævde at

    tail -n 20 /var/log/qmail/current | awk -f snedigt_awk_script.awk

burde være tilstrækkeligt, ved et passende indhold af snedigt_awk_script.awk. Prøv at vise output fra

    tail -n 20 /var/log/qmail/current

og angiv hvilken information, der tilsidst skal komme ud.
Avatar billede dank Nybegynder
07. oktober 2002 - 23:42 #5
- ja jeg var godt klar over at det kunne gøres med awk, men efter at have læst en del om det kom jeg ikke ligefrem videre - og måtte gøre det den tunge vej - synes at awk er lidt svært at komme igang med :o]

Men til -n 20 viser:

@400000003da201e72e777c24 status: local 1/10 remote 0/20
@400000003da201e735c31d6c delivery 159: success: user_does_not_exist,_but_will_deliver_to_/home/vpopmail/domains/dom.dk/michael/Maildir//did_0+0+2/
@400000003da201e735c338c4 status: local 0/10 remote 0/20
@400000003da201e735c33cac end msg 229583

Og det er i virkeligheden kun "0" fra 2. sidste linie "remote 0/20" jeg er intereseret i. Jeg forsøger denne vej at finde frem til hvis 127.0.0.1 bliver brugt til spam og det er der en meget stor sandsynlighed for hvis dette tal er lig 20
Avatar billede jespernaur Nybegynder
08. oktober 2002 - 07:59 #6
Hvad så med det tilsvarende 0 fra linie 1? Hvis dette ikke skal komme ud, hvad skal så bruges som grundlag for at undertrykke det?
Avatar billede dank Nybegynder
08. oktober 2002 - 11:03 #7
tjaae... Det ved jeg ikke.. Ofte når jeg kørte denne forspørgsel fik jeg 4-5 linie med "remote xx/xx".. Derfor brugte jeg en "tail -n 1" så det kun var sidste linie jeg behandlede.
Avatar billede jespernaur Nybegynder
08. oktober 2002 - 18:48 #8
Du kan prøve at eksperimentere lidt med nedenstående:

# Genkend linier, hvori ordene 'status' og 'remote' forekommer
/status.+remote/\
{
  txtlinie = $0;    # her gemmes hele linien
  remote_tal = $6;  # her gemmes fx 0/20
}

# Nedenstående udføres til allersidst, efter behandling af alt input
END\
{
  # Udskriv sidste forekomst af linien
  print txtlinie;

  # Udskriv sidste forekomst af 'remote_tal'
  printf("remote_tal = %s\n", remote_tal);

  # Udskriv alt inden skråstregen
  printf("inden slash: %s\n", substr(remote_tal, 1, index(remote_tal, "/")-1));

}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester