![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| hvordan du skal lese posten ved å ta opp fra en fil i UNIX | raoscb | UNIX for Dummies Spørsmål og svar | 1 | 05-16-2008 07:30 |
| Script for å søke en dårlig posten i en fil og deretter sette den posten i dårlig fil | shilendrajadon | Shell programmering og Skripting | 2 | 12-28-2007 10:02 |
| Script for å søke en dårlig posten i en fil og deretter sette den posten i dårlig fil | shilendrajadon | UNIX for Advanced & ekspertbrukere | 1 | 12-28-2007 10:00 |
| splitte en posten og legge til en post til en fil | rsolap | Shell programmering og Skripting | 1 | 08-13-2007 02:58 |
| Velg tekst i matchende () brakett | cursive | UNIX for Dummies Spørsmål og svar | 4 | 04-20-2007 03:14 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
velg en posten fra en fil målrettet fra andre fila med awk
Jeg trenger hjelp
![]() Jeg har to input-filer og jeg ønsker å generere en rapport basert på de to. filea: hostname, account1, passord , account2, passord hostname, account1, passord hostname, account1, passord , account1, passord , account2, passord gjenta vertsnavn er tomme fileb: Hosta hostb hostc Jeg trenger å generere en oversikt over "vertsnavn regningen passord" for alle verter i fileb som oppstår i filea for en bestemt konto. Dvs. Jeg vil ha en liste over root passord for alle verter i fileb. Jeg vet den logikken jeg vil bruke, men har ikke skripting ferdigheter til å implementere det. Jeg tror den enkleste måten ville være å bruke awk å fylle ut de blanke feltene med vertsnavnet filea og så bare bruke et shell script til grep for hver vert i fileb av den nye filea. Den andre måten er å kjøre ned filea for hvert vertsnavn i fileb inntil enten regningen er matchet eller vertsnavnet er forskjellig og skrive ut resultatet. Hvis kontoen ikke eksisterer for den gitte vertsnavnet ikke gjøre noe. Jeg prøver å lagre manuelt gjøre dette ved skripting det tenkte det ville være raskere, men kanskje jeg tok feil ![]() Her er rammen jeg kom opp med så langt for det vanskeligere måten fordi det ville være mer elegante ![]() #! / bin / sh # hosts \u003d `cat hosts.txt` hostname \u003d "x" siste \u003d "x" for navn i $ (hosts) gjøre # den awk logikken skulle komme hit ferdig |
|
||||
|
Mener du noe sånt? Code:
sed -e 's/.*/^&,/' fileb | grep -f - filea Ikke alle grep versjoner støtte -f alternativet tilsynelatende, men ideen er ganske enkelt å grep for alt fra fileb som er i det første feltet filea. |
|
||||
|
Sitat:
For å klargjøre problemet har filea blanketten for gjentatte vertsnavn og hvis si rot er i en post der det ikke er vertsnavn avlede hvordan du gjør vertsnavn for posten? Vertsnavnet jeg leter etter, er på forhånd ikke tomme posten. eksempel: Hosta, JohnDoe, abc123 , rot, 4009dlkj hostb, janedoe, rrrrrr hvis arrangere en er i fileb forventet ut satt for rot er Hosta, rot, 4009dlkj Jeg prøvde å bruke awk å erstatte tomrommet med en vertsnavn fra den forrige nonblank posten, men jeg holdt får feil. Jeg kunne ikke engang lagre $ 1 til en variabel og skrive det som en test. Jeg vet sed er veldig kraftig, men jeg trodde ikke dette kunne gjøres med én linje. Jeg endte opp med å gjøre det manuelt i går kveld. På dette punktet er det spørrende sinn vil vite og det kan komme godt med hvis jeg må gjøre det igjen. TIA |
|
||||
|
Å, jeg misforstod problemet beskrivelse. Her er noe som forhåpentligvis er nærmere det du ønsket. 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, det NR \u003d\u003d FNR betingelsen er sann, mens fileb leses. Dette er en vanlig awk uttrykk for lesing i en fil med aux-data før den viktigste behandlingen. Den vertsnavn i fileb vil bli brukt til å fylle ut array h. Så i hoveddelen av skriptet, hvis det første feltet er tomt, verdien av vert variabelen vil bli brukt til $ 1. Da den gjeldende verdien til $ 1 vil bli husket i vert i tilfelle neste linje (e) har tomme første felt. Så hvis array h inneholder ikke gjeldende vertsnavnet (dvs. det var ikke til stede i fileb), Er den nåværende linje hoppet. Til slutt, hvis det andre feltet er identisk med variabel kontoenEr linjen skrives. (Really gamle varianter av awk støtter ikke bestått i variabler med -v alternativ - hvis du har dette problemet, se om du kan finne nawk eller mawk eller gawk på systemet, eller en XPG4 awk. Eller du kan interpolere variabelen direkte inn i manuset.) |
|
||||
|
Sitat:
Basert på awk dokumentasjonen jeg prøvde å bruke begynne blokken for å lese filen, men kunne ikke finne ut hvordan du skal lese fra to filer. Kan du forklare hvordan awk bestemmer hvilken fil for å lese fra? Er det koden i det første settet med klammeparenteser () leser den første filen som fulgte, og den andre satt den andre filen? Takk. Jeg lærte mye av dette! |
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|