The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Skicka värden till den sekundära skriptet när den åberopas av primära script venu_eie UNIX för avancerade & Expertanvändare 2 07-03-2008 08:10
Skicka värden till den sekundära skriptet när den åberopas av primära script venu_eie Shell-programmering och Skript 1 07-03-2008 07:16
skapa ett shell script som kräver ett annat manus och och en awk script magikminox Shell-programmering och Skript 0 06-26-2008 03:50
hjälpa mig med att skicka parametrar från sqlplus manus till Unix shell script Hara Shell-programmering och Skript 2 01-29-2008 03:31
Shell Script: vill infoga värden i databasen när uppdateringen skriptet körs ring Shell-programmering och Skript 1 10-25-2007 04:06

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 02-11-2009
Fedora fedora is offline
Registered User
  
 

Join Date: Jul 2006
Inlägg: 94
hur man rättar till detta awk script?

Jag har en loggfil samtidigt ser ut så här

+ +
user_a blabla
blabla nas_b blabla user_d
Detta är en user_a
junk line
annat skräp linje
user_c nas_m blabla
+ +

i stort sett de flesta av linjerna innehåller en "användare" nyckelord, och resten av linjerna inte har "användare" alls.

Så jag har följande skript, som bara extraherar användardelen (om den linjen har en användare sökord) från varje rad

awk '(for (i \u003d 0; i <\u003d NF; i + +)
if ($ i ~ / user /)
(a \u003d $ i)
annan
() fortsätta
(print a)
) '/ Tmp / test

och när jag kör det, jag fick följande resultat

user_a
user_d
user_a
user_a #<\u003d\u003d\u003d faktiskt finns ingen användare i den linjen alls.
user_c

varför detta händer och hur kan jag fixa mitt manus? tack
  #2 (permalänk)  
Old 02-11-2009
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
Modérateur
  
 

Join Date: Dec 2007
Ort: Home av 17-Temne världen mästare Boston Celtics
Inlägg: 1311
Cool

Jag tror att det beror på att du alltid skriver ut ett värde. Så du är inte nog skriva "a" ni begäran av den 4: e raden, så när du skriver ut variabeln, får ni den senast sparade värdet av "a".
Kanske som den första raden ater din annat, göra en
Kod:
a=""

till tomma ut det sista "ett" värde?
  #3 (permalänk)  
Old 02-11-2009
Fedora fedora is offline
Registered User
  
 

Join Date: Jul 2006
Inlägg: 94
Jag reliazed det problemet, men det verkar jag kan inte lösa problemet, här är det ändrade skriptet

awk '(for (i \u003d 0; i <\u003d NF; i + +)
if ($ i ~ / user /)
(a \u003d $ i)
annan
(a \u003d "no")
() Fortsätta
(print a)
) '/ Tmp / test

och produktionen förändring

nej
user_d
user_a
nej
nej

vilket inte är korrekt alls.


Citat:
Ursprungligen postat av joeyg View Post
Jag tror att det beror på att du alltid skriver ut ett värde. Så du är inte nog skriva "a" ni begäran av den 4: e raden, så när du skriver ut variabeln, får ni den senast sparade värdet av "a".
Kanske som den första raden ater din annat, göra en
Kod:
a=""

till tomma ut det sista "ett" värde?
  #4 (permalänk)  
Old 02-11-2009
radoulov's Avatar
radoulov radoulov is online now Forum Staff  
missbrukare
  
 

Join Date: Jan 2007
Ort: Варна, България / Milano, Italia
Inlägg: 2.927
Med awk:


Kod:
awk '{ 
  for (i=1; i<=NF; i++)
    if ($i ~ /user/)
      print $i
      }' infile

Med Perl:


Kod:
perl -lne'print $1 while /(user[^\s]*)/g' infile

Med GNU grep:


Kod:
grep -o 'user[^ \t]*' infile

  #5 (permalänk)  
Old 02-11-2009
Fedora fedora is offline
Registered User
  
 

Join Date: Jul 2006
Inlägg: 94
Tack, jag vet i det här exemplet jag gav, är egrep ett bättre val, men faktiskt min verkliga arbetet "ta reda på både" användare "och" nas "sidan, och sedan skriva ut resultatet.

nedan är resultatet jag vill ha

+
user_a nas_b
user_d nas_b
user_a
user_c nas_m
+

Men problemet är, oavsett hur jag ändrat mitt manus, jag bara inte kommer att få det önskade resultatet ...

[Quote \u003d radoulov; 302286540] Med awk:


Kod:
awk '{ 
  for (i=1; i<=NF; i++)
    if ($i ~ /user/)
      print $i
      }' infile

Med Perl:
  #6 (permalänk)  
Old 02-11-2009
radoulov's Avatar
radoulov radoulov is online now Forum Staff  
missbrukare
  
 

Join Date: Jan 2007
Ort: Варна, България / Milano, Italia
Inlägg: 2.927
Citat:
Ursprungligen postat av Fedora View Post
Tack, jag vet i det här exemplet jag gav, är egrep ett bättre val, men faktiskt min verkliga arbetet "ta reda på både" användare "och" nas "sidan, och sedan skriva ut resultatet.

nedan är resultatet jag vill ha

+
user_a nas_b
user_d nas_b
user_a
user_c nas_m
+
Jag förstår inte logiken ...
Varför user_d nas_b?
  #7 (permalänk)  
Old 02-11-2009
Fedora fedora is offline
Registered User
  
 

Join Date: Jul 2006
Inlägg: 94
sorry, det var ett stavfel
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 02:26.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0