Awk Search
1) I have a variable called service_found assign to it
is "car". I have a file with multiple entries of "car" (see example). I
just need to find "car" not "car1" or "car2".
service_found=car
/\service_found\ <- is this correct to just "car"
car1
car2
2car
3car
car <- i just want this entry
2)
if my syntax was right then what is wrong with this code?
awk '
/Node name/ {
node_found = ($4 == find_node ? 1 : 0);
}
/Service name/ && node_found {
service_found = ($4)
}
/\service_found/ {
print " Port listing"
print " ------------"
print " "
print "Node Name = " node_found
print "Service Name = " service_found
print "Port Number = " $2
}
' $dblist $nodelist $servicelist
/-----------------------------/
1) use (if service name in first field, if not replace
$1 by the right field) :
$1 == service_found
2) Your script with corrections :
awk '
/Node name/ {
???node_found = ($4 == find_node);
}
/Service name/ && node_found {
???service_found = $4;
}
$1 == service_found {
print " Port listing"
print " ------------"
print " "
print "Node Name = " node_found
print "Service Name = " service_found
print "Port Number = " $2
}
' $dblist $nodelist $servicelist
Why three input files ?
Are all the file the same format ?
I'm not sure this script do what you want ...
/-----------------------------/
Here is my scripts. it does need three input files, each
file is different.
I am having problems with the service_found.
After this step
/Service name/ && node_found {
service_found = ($4)
I need the service_found in a search / / then print..
Hope you can understand this.
!/bin/ksh
db=$1
dblist=listdb.txt
nodelist=node_directory.txt
servicelist=services.txt
awk '
/Database name/ {
db_found = ($4 == "'$db'" ? 1 : 0);
}
/Node name/ && db_found {
find_node =($4)
}
/Node name/ {
node_found = ($4 == find_node ? 1 : 0);
}
/Service name/ && node_found {
service_found = ($4)
}
/\service_found/ {
print " Port listing"
print " ------------"
print " "
print "Database name = " db_found
print "Node Name = " node_found
print "Service Name = " service_found
print "Port Number = " $2
}
' $dblist $nodelist $servicelist
/-----------------------------/
Your db test will not works (See my response to your
post "Awk in a script")
Modify the pattern /\service_found/.
Please post the format of the three files.
/-----------------------------/
How the scripts work from command to the end.
1) cmd - ./nodelist IQSB
2) in frist input file- scripts searches for IQSB then
find the node name
3) in second input file - searches for Node name then
find the service name.
4) in last input file - searches for service name and
prints out IQSB, Node name, and serivce name. I just won the service to
be found not any thing that matches it..
First input file looks like
Database 1 entry:
Database alias = IQSB
Database name = IQSB
Node name = ISTSB
Database release level = 9.00
Comment =
Directory entry type = Remote
Catalog node number = -1
Second input file.
Node 13 entry:
Node name = ISTSB
Comment =
Protocol = TCPIP
Hostname = tornsist
Service name = db2isb
last input file ;
db2isb 12340/tcp
DB2_db2isb 12341/tcp
db2isbi 12344/tcp
/-----------------------------/
Try this script :
db=$1
dblist=listdb.txt
nodelist=node_directory.txt
servicelist=services.txt
awk -v find_db="$db" '
/Database name/ && find_db && $4 == find_db
{
???db_found = $4;
???find_db = 0;
???find_db_node = 1;
???next;
}
/Node name/ && find_db_node {
???node_found = $4;
???find_db_node = 0;
???find_node = $4;
???next;
}
/Node name/ && find_node && $4 == find_node
{
???find_node = 0;
???find_node_serv = 1;
???next;
}
/Service name/ && find_node_serv {
???service_found = $4;
???find_node_serv = 0;
???find_service = $4;
???next;
}
find_service && $1 == find_service {
???print " Port listing"
???print " ------------"
???print " "
???print "Database name = " db_found
???print "Node Name = " node_found
???print "Service Name = " service_found
???print "Port Number = " $2
???exit;
}
' $dblist $nodelist $servicelist
I think that the solution of your problem can be more
simple...
/-----------------------------/
This exactly what I need.. But I have one problem. It
works if for a 2 medium and 1 small input files, but I use 3 medium files
it does not come out.. the out is blank... Do you have any clues why???
/-----------------------------/
More info on my input files
listdb.txt
518 lines 15689 characters
node_directory.txt
141 lines 3743 characters
services.txt
741 lines 23809 characters.
It get lost in between the listdb.txt and node_directory.
The reason I know this is I cut the list down to half for both list.txt
and node_directory and it works fine..
/-----------------------------/
I don't see why the size of the input files can be at
the origin of your problem.
Have a Unix Problem
Unix
Forum - Do you have a UNIX Question?
Unix Books :-
UNIX Programming,
Certification, System Administration, Performance Tuning Reference Books
Return to : - Unix
System Administration Hints and Tips
(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.
Information used on this site is at your own risk.
All product names are trademarks of their respective
companies.
The site www.gotothings.com is in no way affiliated with
or endorsed by any company listed at this site.
Any unauthorised copying or mirroring is prohibited.
|