![]() |
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui. |
Più di UNIX e Linux Forum Argomenti potreste trovare utili
|
||||
| Filo | Thread Starter | Forum | Risposte | Ultimo Post |
| Come leggere il record dal record da un file in UNIX | raoscb | UNIX for Dummies Domande & Risposte | 1 | 05-16-2008 07:30 AM |
| Script per cercare un record negativo in un file poi il record nel file di cattivo | shilendrajadon | Shell scripting e di programmazione | 2 | 12-28-2007 10:02 AM |
| Script per cercare un record negativo in un file poi il record nel file di cattivo | shilendrajadon | UNIX e avanzata per utenti esperti | 1 | 12-28-2007 10:00 AM |
| frazionamento un record e l'aggiunta di un record in un file | rsolap | Shell scripting e di programmazione | 1 | 08-13-2007 02:58 PM |
| Selezionare il testo all'interno di corrispondenza () parentesi | corsivo | UNIX for Dummies Domande & Risposte | 4 | 04-20-2007 03:14 AM |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
selezionare un record da un file corrispondenti dal secondo file utilizzando awk
Ho bisogno di aiuto
![]() Ho due file di ingresso e vorrei creare una relazione basata su due. Filea: hostname, account1, la password , account2, la password hostname, account1, la password hostname, account1, la password , account1, la password , account2, la password ripetendo i nomi host sono vuoti fileb: Hosta HostB hostc Ho bisogno di generare un record di "hostname password" per tutti gli host che si verificano in fileb in Filea per un account specifico. Vale a dire che voglio una lista di password di root per tutti gli host in fileb. So che la logica che voglio usare, ma non hanno la capacità di scripting per la sua attuazione. Penso che il modo più semplice sarebbe quella di usare awk per riempire gli spazi vuoti con il nome di Filea e poi semplicemente utilizzare uno script di shell a grep per ogni host nel fileb del nuovo Filea. L'altro modo è quello di correre verso il basso Filea per ogni host nel fileb fino trovato il conto è l'hostname o è diverso e stampare il risultato. Se l'account non esiste per l'hostname dato non fare nulla. Sto cercando di salvare manualmente questo script da pensare che sarebbe più veloce, ma forse è stato sbagliato ![]() Ecco il quadro mi si avvicinò con finora per la strada più difficile, perché sarebbe più elegante ![]() #! / bin / sh # host \u003d `cat hosts.txt» hostname \u003d "x" ultimo \u003d "x" per nome in $ (host) fare # awk la logica sarebbe venuto qui fatto |
|
||||
|
Vuoi dire qualcosa come questo?
Codice:
sed -e 's/.*/^&,/' fileb | grep -f - filea |
|
||||
|
Citazione:
Per chiarire il problema, ha Filea sbozzi per ripetere i nomi host e dire se è radice di un record in cui non vi è alcun nome come si fa a ricavare il nome host per il record? Il nome host che sto cercando non è la prima registrazione in bianco. esempio: Hosta, mariorossi, abc123 , root, 4009dlkj HostB, janedoe, rrrrrr se l'host si trova in uno fileb atteso per mettere fuori radice è Hosta, radice, 4009dlkj Ho cercato di usare awk per sostituire il bianco con un hostname nonblank dal precedente, ma ho continuato a registrare errori. Non ho potuto anche memorizzare $ 1 ad una variabile e stamparlo come un banco di prova. So sed è molto potente ma non pensa che questo potrebbe essere fatto con una sola riga. Ho finito per farlo manualmente la notte scorsa. A questo punto è curioso menti vogliono conoscere e che potrebbe rivelarsi utile, se devo farlo di nuovo. TIA |
|
||||
|
Oh, ho frainteso la tua descrizione del problema. Qui c'è qualcosa che si spera sia più vicino a ciò che si voleva.
Codice:
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 vecchie varianti di awk non supportano passa le variabili con il -v opzione - se avete questo problema, vedere se si può trovare nawk o mawk o gawk sul proprio sistema, o un XPG4 awk. Oppure si può interpolare direttamente la variabile nello script.) |
|
||||
|
Citazione:
Basato su awk documentazione ho cercato di utilizzare il blocco di iniziare a leggere il file, ma non poteva capire come leggere da due file. Esprimi la tua mente spiega come awk determina che il file da leggere? E 'il codice nel primo set di parentesi graffe () recita il primo file forniti e la seconda serie il secondo file? Grazie. Ho imparato molto da questo! |
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|