The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Hvordan læser man registrerer optage fra en fil i UNIX raoscb UNIX for dummyer Spørgsmål & svar 1 05-16-2008 07:30 AM
Script til at søge en dårlig record i en fil derefter satte record i dårlig fil shilendrajadon Shell Programmering og Scripting 2 12-28-2007 10:02 AM
Script til at søge en dårlig record i en fil derefter satte record i dårlig fil shilendrajadon UNIX for Advanced & Ekspertsøgning Brugere 1 12-28-2007 10:00 AM
opdele en rekord og tilføje en optegnelse til en fil rsolap Shell Programmering og Scripting 1 08-13-2007 02:58 PM
Vælg tekst inden matching () beslag cursive UNIX for dummyer Spørgsmål & svar 4 04-20-2007 03:14 AM

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øg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 06-05-2008
synmag synmag is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 3
Vælg et referat fra en fil der matcher fra anden fil med awk

Jeg har brug for hjælp

Jeg har to input filer, og jeg vil gerne generere en rapport baseret på de to.

filea:
hostname, account1, password
, account2, password
hostname, account1, password
hostname, account1, password
, account1, password
, account2, password

gentage værtsnavne er tomme

fileb:
Hosta
hostb
hostc

Jeg har brug for at generere et referat af "hostname kontoadgangskode" for alle værter i fileb, der forekommer i filea til en bestemt konto. Dvs. jeg vil have en liste over rod adgangskoder til alle værter i fileb. Jeg kender logikken jeg ønsker at bruge, men ikke har de evner inden for scripting til at gennemføre den. Jeg tror den nemmeste måde ville være at bruge awk til at udfylde de tomme felter med værtsnavnet på filea og derefter blot bruge et shell script til at grep for hver vært i fileb af den nye filea.

Den anden måde er at løbe ned filea for hver værtsnavn i fileb indtil enten kontoen er matchede eller værtsnavnet er anderledes og udskrive resultatet. Hvis kontoen ikke findes for den givne værtsnavn ikke gøre noget.

Jeg forsøger at gemme manuelt at gøre dette ved at scripte det tænkte det ville være hurtigere, men måske var jeg forkert

Her er de rammer, jeg kom op med så langt for hårdere måde, fordi det ville være mere elegant

#! / bin / sh
#
hosts \u003d `cat hosts.txt`
hostname \u003d "x"
sidste \u003d "x"

for navnet i $ (værter)
gøre
# de awk logik ville komme her
gjort
  #2 (permalink)  
Old 06-05-2008
lo tan lo tan is offline
Registreret Bruger
  
 

Join Date: May 2008
Stillinger: 8
du kan give os et eksempel på det resultat, at du prøver at opnå, og basere på, at vi kan komme op med en løsning.
  #3 (permalink)  
Old 06-06-2008
epoke era is offline Forum Advisor  
Herder af Useless Cats (On Sabbatical)
  
 

Join Date: Mar 2008
Location: / der / er / kun / bin / sh
Stillinger: 3652
Du betyder noget som dette?

Code:
sed -e 's/.*/^&,/' fileb | grep -f - filea
Ikke alle grep versioner understøtter -f valgmulighed tilsyneladende, men ideen er ganske enkelt at grep til alt fra fileb der er i det første felt af filea.
  #4 (permalink)  
Old 06-06-2008
synmag synmag is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 3
Citat:
Oprindeligt Indsendt af epoke View Post
Du betyder noget som dette?

Code:
sed -e 's/.*/^&,/' fileb | grep -f - filea
Ikke alle grep versioner understøtter -f valgmulighed tilsyneladende, men ideen er ganske enkelt at grep til alt fra fileb der er i det første felt af filea.
Tak for svaret. Min version understøtter ikke-f desværre. Ser man på den kode, hvor ville jeg angive navnet på kontoen, jeg søger efter? Sige, hvis jeg ønsker at liste værten, konto, adgangskode for alle root-konti? Også ville arbejde for de poster, hvor værtsnavn er blank?

At klarlægge problemet, filea har emner til at gentage værtsnavne og sige, hvis rod er i en post, hvor der ikke er nogen værtsnavn, hvordan du får værtsnavn for the record "? Værtsnavnet jeg leder efter, er den tidligere ikke tom post.

Eksempel:

Hosta, persmed, abc123
Rodfrugter, 4009dlkj
hostb, janedoe, rrrrrr

hvis vært for et er i fileb den forventede ud sat for rod er

Hosta, root, 4009dlkj

Jeg prøvede at bruge awk at erstatte den tomme med et værtsnavn fra den tidligere ikke-tomme registrere, men jeg holdt fik fejl. Jeg kunne ikke engang gemme $ 1 til en variabel og udskrive det som en test. Jeg ved sed er meget kraftfuld, men jeg troede ikke, at dette kunne ske med en linje.

Jeg endte med at gøre det manuelt i aftes. På dette punkt er det spørgende sind ønsker at vide, og det kan komme i praktisk, hvis jeg er nødt til at gøre det igen.

TIA
  #5 (permalink)  
Old 06-06-2008
reborg's Avatar
reborg reborg is online now Forum Staff  
Administrator
  
 

Join Date: Mar 2005
Beliggenhed: Irland
Posts: 4.211
Citat:
Oprindeligt Indsendt af epoke View Post
Ikke alle grep versioner understøtter -f valgmulighed tilsyneladende, men ideen er ganske enkelt at grep til alt fra fileb der er i det første felt af filea.
Rigtigt, men de fleste, der ikke vil støtte hverken egrep-f eller fgrep.
  #6 (permalink)  
Old 06-09-2008
epoke era is offline Forum Advisor  
Herder af Useless Cats (On Sabbatical)
  
 

Join Date: Mar 2008
Location: / der / er / kun / bin / sh
Stillinger: 3652
Åh, jeg misforstod dit problem beskrivelse. Her er noget, som forhåbentlig er tættere på, hvad du ville.

Code:
awk -F , -v acct=root 'NR==FNR { h[$1]++; next; }
{ if($1 == "") $1=host; host=$1; if (! h[$1]) next;
if ($2 == acct) print }' fileb filea
Den NR \u003d\u003d FNR betingelse er sand, mens fileb er ved at blive læst. Dette er en fælles awk formsprog til at læse i en fil med hjælpeansatte data, før de vigtigste behandling. Værten navne i fileb vil blive brugt til at udfylde array h. Så i selve scriptet, hvis det første felt er tomt, værdien af vært variabel vil blive anvendt til $ 1. Så vil den aktuelle værdi af $ 1 blive husket i vært i tilfælde af den næste linje (r) er tomme første felter. Så, hvis array h ikke indeholder den nuværende vært navn (og det var ikke til stede i fileb), Den nuværende linje er sprunget over. Endelig, hvis det andet felt er identisk med den variable ACCT, Linjen er udskrevet.

(Really gamle varianter af awk understøtter ikke forbi i variabler med -v valg - hvis du har dette problem, se om du kan finde nawk eller mawk eller gawk på dit system, eller en XPG4 awk. Eller du kan interpolere de variable direkte i scriptet.)
  #7 (permalink)  
Old 06-11-2008
synmag synmag is offline
Registreret Bruger
  
 

Join Date: Jun 2008
Stillinger: 3
Citat:
Oprindeligt Indsendt af epoke View Post
Åh, jeg misforstod dit problem beskrivelse. Her er noget, som forhåbentlig er tættere på, hvad du ville.

Code:
awk -F , -v acct=root 'NR==FNR { h[$1]++; next; }
{ if($1 == "") $1=host; host=$1; if (! h[$1]) next;
if ($2 == acct) print }' fileb filea
Den NR \u003d\u003d FNR betingelse er sand, mens fileb er ved at blive læst. Dette er en fælles awk formsprog til at læse i en fil med hjælpeansatte data, før de vigtigste behandling. Værten navne i fileb vil blive brugt til at udfylde array h. Så i selve scriptet, hvis det første felt er tomt, værdien af vært variabel vil blive anvendt til $ 1. Så vil den aktuelle værdi af $ 1 blive husket i vært i tilfælde af den næste linje (r) er tomme første felter. Så, hvis array h ikke indeholder den nuværende vært navn (og det var ikke til stede i fileb), Den nuværende linje er sprunget over. Endelig, hvis det andet felt er identisk med den variable ACCT, Linjen er udskrevet.

(Really gamle varianter af awk understøtter ikke forbi i variabler med -v valg - hvis du har dette problem, se om du kan finde nawk eller mawk eller gawk på dit system, eller en XPG4 awk. Eller du kan interpolere de variable direkte i scriptet.)
Det er præcis, hvad jeg ville. Min version af awk ikke støtte vedtagelsen af den variable, men jeg har nawk og det fungerede perfekt.

Baseret på awk dokumentation jeg prøvede at bruge begynde blok til at læse filen, men kunne ikke finde ud af at læse fra to filer. Vil du noget imod at forklare, hvordan awk afgør hvilken fil for at læse fra? Er det den kode i første sæt af parenteser () læser den første fil, der leveres, og det andet sæt den anden fil?

Tak. Jeg har lært meget af dette!
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 09:31 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0