The UNIX and Linux Forums  
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.

Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
zoeken velden in een bestand Pablo_beezo Programmeren en Shell Scripting 4 10-20-2008 10:52
Zoek naar String binnen Bestand en Return Bestandsnaam bggibson UNIX voor Dummies Questions & Answers 4 09-25-2008 05:45
Hoe om te zoeken naar twee velden jisha Programmeren en Shell Scripting 3 04-23-2008 05:16
zoek en vervang verschillende gebieden tungaw2004 UNIX voor Dummies Questions & Answers 3 03-29-2007 03:16
Shell script om alle ID's uit het bestand op basis van de distributie-ID zoekopdracht kumbhatalok UNIX voor Dummies Questions & Answers 1 10-06-2006 12:53

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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 11-17-2008
da2357 da2357 is offline
Geregistreerde gebruiker
  
 

Join Date: november 2008
Posten: 3
Zoeken plat bestand en terugkeer 3 velden

Ik moet kunnen zoeken een plat bestand (comma-separated values) voor een specifieke waarde en vervolgens terug op de 2 volgende velden in variabelen. Hier is een voorbeeld van een "flat file:

SN, account, IPAddress
W120394YF, adam, 10.0.20.2
W394830PR, Betty, 10.0.20.3
W847582TD, Charlie, 10.0.20.4
W749509AY, Donna, 10.0.20.5

Ik heb al BASH code die uittreksels de computer het serienummer en slaat deze op SERIALNUM. Ik wil zoeken in het bestand dat SERIALNUM en het rendement op de 2 volgende velden in ACCT en IPADD. Suggesties?
  #2 (permalink)  
Old 11-17-2008
in2nix4life's Avatar
in2nix4life in2nix4life is offline
Geregistreerde gebruiker
  
 

Join Datum: oktober 2007
Locatie: East Coast
Posts: 58
Met behulp van awk zoals deze kunnen bijdragen dat u in de goede richting:

serialnum \u003d `awk-F", " '/ W394830PR / (print $ 1)" bestand `
account \u003d `awk-F", " '/ W394830PR / (print $ 2)' bestand`
ipadres \u003d `awk-F", " '/ W394830PR / (print $ 3)' bestand`
  #3 (permalink)  
Old 11-18-2008
Christoph Spohr Christoph Spohr is offline
Geregistreerde gebruiker
  
 

Join Date: Sep 2008
Posts: 205
Hoi,

Ik stel voor om eerst te lezen in het hele bestand in drie array, een voor de serie, een voor de gebruiker en een voor de ipadd.

Code:
declare -a SERIAL ACCT IPADD 
let count=0 
while IFS=, read a b c 
do 
    SERIAL[$count]=$a; ACCT[$count]=$b; IPADD[$count]=$c; ((count++)) 
done < file
Dit zet de interne veld scheidingsteken aan "," en leest de drie komma aparte velden in de drie variabelen die geduwd in de aangegeven arrays.

Nu kunt u zoeken deze array als volgt uit:

Code:
let i=0 
while [[ $i -lt ${#SERIAL[@]} ]] 
do 
  [[ ${SERIAL[${i}]} = W120* ]] && printf "%s %s\n" ${ACCT[${i}]} ${IPADD[${i}]} 
  ((i++)) 
done
Deze lussen door het array. $ (# VOLGNUMMER [@]) geeft u het aantal items in een array. Als een bepaalde VOLGNUMMER wordt gevonden, wordt de desbetreffende gegevens worden uitgevoerd.

HTH Chris
  #4 (permalink)  
Old 11-18-2008
da2357 da2357 is offline
Geregistreerde gebruiker
  
 

Join Date: november 2008
Posten: 3
Citaat:
Oorspronkelijk geplaatst door in2nix4life View Post
Met behulp van awk zoals deze kunnen bijdragen dat u in de goede richting:

serialnum \u003d `awk-F", " '/ W394830PR / (print $ 1)" bestand `
account \u003d `awk-F", " '/ W394830PR / (print $ 2)' bestand`
ipadres \u003d `awk-F", " '/ W394830PR / (print $ 3)' bestand`
Grote (en bedankt), dit heb ik er 99%. Hier is een fragment van wat ik heb, met behulp van uw idee:

Code:
#!/bin/bash
USERLIST="/Users/johndoe/.bin/xBackup_users"
SRCHFOR="W8735UL8Z5V"
#
USERNAME=`awk -F "," '/W8735UL8Z5V/{print $2}' $USERLIST`
PASSWORD=`awk -F "," '/W8735UL8Z5V/{print $3}' $USERLIST`
RSYNCIP=`awk -F "," '/W8735UL8Z5V/{print $4}' $USERLIST`
#
clear
echo
echo Your account name is $USERNAME
echo Your password is $PASSWORD
echo Your IP address is $RSYNCIP
echo
exit
Om af te sluiten dit heb ik liever gebruik van de variabele SRCHFOR in het commando awk en ik heb geprobeerd dit op verschillende manieren, maar niet weet hoe je het aan het werk. (Ik heb al aparte code dat uittreksels van het serienummer van het apparaat.)

Elke laatste ideeën?
  #5 (permalink)  
Old 11-18-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Join Date: december 2007
Locatie: Home 17-time wereld kampioen Boston Celtics
Berichten: 1311
Wink

Neem een kijkje in de vorige suggestie (van yongitz):
Citaat:
awk-F ","-v pat \u003d $ SERIALNUM '$ 0 ~ pat (print $ 2, $ 3)' your_flat_file.txt
Je moet een variabele voor gebruik in awk, zoals hierboven. De-v zegt het instellen van een variabele, en de een is toegewezen pat, en het is gelijk aan $ SERIALNUM. Je moet hetzelfde doen voor uw SRCHFOR variabele. Dan kan je gebruik pat (of een andere variabele naam die u kent) binnen awk te doen van uw zoekwoorden.
  #6 (permalink)  
Old 11-18-2008
da2357 da2357 is offline
Geregistreerde gebruiker
  
 

Join Date: november 2008
Posten: 3
Citaat:
Oorspronkelijk geplaatst door da2357
Elke laatste ideeën?
Eureka, ik heb het gevonden!

Code:
#!/bin/bash
USERLIST="/Users/johndoe/.bin/xBackup_users"
SRCHFOR="W8735UL8Z5V"
#
USERNAME=`awk -F "," '/^'"$SRCHFOR"'/ {print $2}' $USERLIST`
PASSWORD=`awk -F "," '/^'"$SRCHFOR"'/ {print $3}' $USERLIST`
RSYNCIP=`awk -F "," '/^'"$SRCHFOR"'/ {print $4}' $USERLIST`
#
clear
echo
echo Your account name is $USERNAME
echo Your password is $PASSWORD
echo Your IP address is $RSYNCIP
echo
exit
Bedankt aan iedereen voor uw ideeën.
  #7 (permalink)  
Old 11-18-2008
yongitz yongitz is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Locatie: Filipijnen
Posts: 68
Code:
awk -F"," -v pat=$SERIALNUM '$0 ~ pat {print $2,$3}' your_flat_file.txt
Dit veronderstelt dat je alleen maar een serienummer opgeslagen in SERIALNUM variabele.
Closed Thread

Bladwijzers

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 05:20 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0