The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



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

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 denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 06-05-2008
synmag synmag is offline
Registrert bruker
  
 

Bli Dato: juni 2008
Innlegg: 3
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
  #2 (permalink)  
Old 06-05-2008
lo tan lo tan is offline
Registrert bruker
  
 

Bli Dato: mai 2008
Innlegg: 8
du kan gi oss et eksempel på det resultat at du prøver å oppnå, og basen på at vi kan komme opp med en løsning.
  #3 (permalink)  
Old 06-06-2008
æra era is offline Forum Advisor  
Herder av Useless Cats (På Sabbatical)
  
 

Bli Date: Mar 2008
Sted: / det / er / bare / bin / sh
Innlegg: 3652
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.
  #4 (permalink)  
Old 06-06-2008
synmag synmag is offline
Registrert bruker
  
 

Bli Dato: juni 2008
Innlegg: 3
Sitat:
Originally Posted by æra View Post
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.
Takk for svar. Min versjon støtter ikke-f dessverre. Ser på koden der ville jeg angi kontonavn jeg leter etter? Si hvis jeg vil liste verten, konto, passord for alle root-kontoer? Også ville dette arbeidet for poster hvor vertsnavnet er tomt?

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
  #5 (permalink)  
Old 06-06-2008
reborg's Avatar
reborg reborg is offline Forum Staff  
Administrator
  
 

Bli Date: Mar 2005
Sted: Irland
Innlegg: 4246
Sitat:
Originally Posted by æra View Post
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.
Sant, men de fleste som ikke vil støtte enten egrep-f eller fgrep.
  #6 (permalink)  
Old 06-09-2008
æra era is offline Forum Advisor  
Herder av Useless Cats (På Sabbatical)
  
 

Bli Date: Mar 2008
Sted: / det / er / bare / bin / sh
Innlegg: 3652
Å, 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.)
  #7 (permalink)  
Old 06-11-2008
synmag synmag is offline
Registrert bruker
  
 

Bli Dato: juni 2008
Innlegg: 3
Sitat:
Originally Posted by æra View Post
Å, 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.)
Det er akkurat det jeg ville. Min versjon av awk ikke støtte bestått av den variable, men jeg har nawk og det fungerte utmerket.

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!
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 04:23.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0