![]() |
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
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 |
|
||||
|
Du betyder noget som dette?
Code:
sed -e 's/.*/^&,/' fileb | grep -f - filea |
|
||||
|
Citat:
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 |
|
||||
|
Å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
(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.) |
|
||||
|
Citat:
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! |
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|