Wrong result return from script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Wrong result return from script
# 1  
Old 10-09-2013
Wrong result return from script

Hi Gurus,

I need a script to compare two files: sample file like below:
list:
Code:
cde,file4
cde,file5
def,file6
def,file7
def,file8
abc,file1
abc,file2
abc,file3
acd,file9
acd,file10

tmp
Code:
file1
file2
file3
file4
file5
file6

I want to compare tmp file file name with list file 2nd column, if file name in both file, then print entire record from list, if file name only exists in list then print "not found" plus the record. for above two file, I except get below result:
Code:
cde,file4
cde,file5
def,file6
Not Found def,file7
Not Found def,file8
abc,file1
abc,file2
abc,file3
Not Found acd,file9
Not Found acd,file10

I tried below script, but the output is wrong.
Code:
awk -F"," 'NR==FNR{a[$1];next}{if (a[$2])print a[$1],$0;else print "Not Found", $0;}'  tmp list

the output as below:
Code:
Not Found cde,file4
Not Found cde,file5
Not Found def,file6
Not Found def,file7
Not Found def,file8
Not Found abc,file1
Not Found abc,file2
Not Found abc,file3
Not Found acd,file9
Not Found acd,file10

Hope the experts in the forum take a look, tell me where I did wrong and how to fix this.

Thanks in advance
# 2  
Old 10-09-2013
Replace if (a[$2]) with if ($2 in a)
This User Gave Thanks to Yoda For This Post:
# 3  
Old 10-09-2013
Correct your code like this

Code:
awk -F, 'FNR==NR{_[$1];next}{print ($2 in _)?$0:"Not Found" OFS $0}' tmp list

Code:
cde,file4
cde,file5
def,file6
Not Found def,file7
Not Found def,file8
abc,file1
abc,file2
abc,file3
Not Found acd,file9
Not Found acd,file10


Last edited by Akshay Hegde; 10-09-2013 at 02:25 AM..
This User Gave Thanks to Akshay Hegde For This Post:
# 4  
Old 10-09-2013
Quote:
Originally Posted by Yoda
Replace if (a[$2]) with if ($2 in a)
Thanks for you replay.

I use below code I got error:
Code:
awk -F"," 'NR==FNR{a[$1];next}{if ($2 in a) print a[$1],$0;else print "Not Found", $0;}'  tmplist srclist

Code:
awk: syntax error near line 1
awk: illegal statement near line 1
awk: illegal statement near line 1

My server is SunOS 5.10 Generic_144488-17 sun4v sparc SUNW,SPARC-Enterprise-

would you please take a look.

Thanks in advance

---------- Post updated at 11:56 AM ---------- Previous update was at 11:52 AM ----------

Quote:
Originally Posted by Akshay Hegde
Correct your code like this

Code:
awk -F, 'FNR==NR{_[$1];next}{print ($2 in _)?$0:"Not Found" OFS $0}' tmp list

Code:
cde,file4
cde,file5
def,file6
Not Found def,file7
Not Found def,file8
abc,file1
abc,file2
abc,file3
Not Found acd,file9
Not Found acd,file10

Thanks for your replay.

when using the code you provide, I got error.
awk: syntax error near line 1
awk: illegal statement near line 1
My server is SunOS 5.10 Generic_144488-17 sun4v sparc SUNW,SPARC-Enterprise-

by the way, would you please briefly explain what "_[$1]", "($2 in _)?" mean?

Thanks in advance

Last edited by ken6503; 10-09-2013 at 02:28 PM..
# 5  
Old 10-09-2013
_[$1] is an array

? is ternary operator used instead of if

go through ?: - Wikipedia, the free encyclopedia

If you are running this on a Solaris/SunOS system, use /usr/xpg4/bin/awk , /usr/xpg6/bin/awk , or nawk instead of awk

---------- Post updated at 11:49 AM ---------- Previous update was at 11:43 AM ----------

Quote:
Originally Posted by ken6503
Thanks for you replay.

I use below code I got error:
Code:
awk -F"," 'NR==FNR{a[$1];next}{if ($2 in a) print a[$1],$0;else print "Not Found", $0;}'  tmplist srclist

Code:
awk: syntax error near line 1
awk: illegal statement near line 1
awk: illegal statement near line 1

My server is SunOS 5.10 Generic_144488-17 sun4v sparc SUNW,SPARC-Enterprise-

would you please take a look.

Thanks in advance


Thanks in advance
it was suppose to be

Code:
awk -F","  'NR==FNR{a[$1];next}{if ($2 in a){print $0}else {print "Not Found", $0}}' tmplist srclist

This User Gave Thanks to Akshay Hegde For This Post:
# 6  
Old 10-09-2013
Quote:
Originally Posted by Akshay Hegde
_[$1] is an array

? is ternary operator used instead of if

go through ?: - Wikipedia, the free encyclopedia

If you are running this on a Solaris/SunOS system, use /usr/xpg4/bin/awk , /usr/xpg6/bin/awk , or nawk instead of awk

---------- Post updated at 11:49 AM ---------- Previous update was at 11:43 AM ----------

Thanks for your replay.

the way you mentioned works.


it was suppose to be

Code:
awk -F","  'NR==FNR{a[$1];next}{if ($2 in a){print $0}else {print "Not Found", $0}}' tmplist srclist

---------- Post updated at 01:30 PM ---------- Previous update was at 01:18 PM ----------

Hi Gurus,

I have two files which like below:
srclist;
Code:
cde,file4
cde,file5
def,file6
def,file7
def,file8
abc,file1
abc,file2
abc,file3
acd,file9
acd,file10

tmplist
Code:
Oct,9,11:42,file1
Oct,9,11:42,file2
Oct,9,11:43,file3
Oct,9,11:42,file4

I need to compare to find filename existing in srclist but not in tmplist.
I use code as below:
Code:
nawk -F"," 'NR==FNR{a[$4]=$0;next}{if ($2 in a) print $0,"," "Found";else print $0,"," "Not Found";}'  tmplist srclist

and I got below result:
Code:
cde,file4  ,Found
cde,file5 ,Not Found
def,file6 ,Not Found
def,file7 ,Not Found
def,file8 ,Not Found
abc,file1  ,Found
abc,file2  ,Found
abc,file3  ,Found
acd,file9 ,Not Found
acd,file10 ,Not Found

I have one issue, I need print out the first 3 columns from tmplist, I tried below code, but it doesn't work.
Code:
nawk -F"," 'NR==FNR{a[$4]=$0;next}{if ($2 in a) print $0,a[$1],"," "Found";else print $0,"," "Not Found";}'  tmplist srclist

for my understanding, a[$1] should be first file first column, but it isn't.
how can I print first file's column in my code?

Any input is really really appreciate.

Thanks in advance
# 7  
Old 10-09-2013
Quote:
Originally Posted by ken6503
---------- Post updated at 01:30 PM ---------- Previous update was at 01:18 PM ----------

Hi Gurus,

I have two files which like below:
srclist;
Code:
cde,file4
cde,file5
def,file6
def,file7
def,file8
abc,file1
abc,file2
abc,file3
acd,file9
acd,file10

tmplist
Code:
Oct,9,11:42,file1
Oct,9,11:42,file2
Oct,9,11:43,file3
Oct,9,11:42,file4

I need to compare to find filename existing in srclist but not in tmplist.
I use code as below:
Code:
nawk -F"," 'NR==FNR{a[$4]=$0;next}{if ($2 in a) print $0,","  "Found";else print $0,"," "Not Found";}'  tmplist srclist

and I got below result:
Code:
cde,file4  ,Found
cde,file5 ,Not Found
def,file6 ,Not Found
def,file7 ,Not Found
def,file8 ,Not Found
abc,file1  ,Found
abc,file2  ,Found
abc,file3  ,Found
acd,file9 ,Not Found
acd,file10 ,Not Found

I have one issue, I need print out the first 3 columns from tmplist, I tried below code, but it doesn't work.
Code:
nawk -F"," 'NR==FNR{a[$4]=$0;next}{if ($2 in a) print $0,a[$1],","  "Found";else print $0,"," "Not Found";}'  tmplist srclist

for my understanding, a[$1] should be first file first column, but it isn't.
how can I print first file's column in my code?

Any input is really really appreciate.

Thanks in advance
Whether this is your interest ??
Code:
$ nawk -F"," 'NR==FNR{a[$4]=$3;next}{if ($2 in a) print $0","a[$2] ",""Found";else print $0",""----""," "Not Found";}' tmplist srclist
cde,file4,11:42,Found
cde,file5,----,Not Found
def,file6,----,Not Found
def,file7,----,Not Found
def,file8,----,Not Found
abc,file1,11:42,Found
abc,file2,11:42,Found
abc,file3,11:43,Found
acd,file9,----,Not Found
acd,file10,----,Not Found


Last edited by Akshay Hegde; 10-09-2013 at 03:47 PM.. Reason: color to highlight
This User Gave Thanks to Akshay Hegde For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Return: can only `return' from a function or sourced script

Not sure where the problem is. I can run the script without any issue using the following command. . /opt/app/scripts/cdc_migration.sh But it fails with the below error when I try it this way /opt/app/scripts/cdc_migration.sh /opt/app/scripts/cdc_migration.sh: line 65: return: can only... (1 Reply)
Discussion started by: svajhala
1 Replies

2. Shell Programming and Scripting

Python - Function print vs return - whats wrong

All, I have a basic buzz program written in python with return function. If i change return with print,it works fine but i want to know whats wrong with return statement.Can anyone help me whats wrong with this #!/usr/bin/python def div4and6(s,e): for i in range(s,e+1): if... (5 Replies)
Discussion started by: oky
5 Replies

3. UNIX for Advanced & Expert Users

File command return wrong filetype while file holds group separator char.

hi, I am trying to get the FileType using the File command. I have one file, which holds Group separator along with ASCII character. It's a Text file. But when I ran the File command the FileType is coming as "data". It should be "ASCII, Text file". Is the latest version of File... (6 Replies)
Discussion started by: Arpitak29
6 Replies

4. Shell Programming and Scripting

Query the table and return values to shell script and search result values from another files.

Hi, I need a shell script, which would search the result values from another files. 1)execute " select column1 from table_name" query on the table. 2)Based on the result, need to be grep from .wft files. could please explain about this.Below is the way i am using. #!/bin/sh... (4 Replies)
Discussion started by: Rami Reddy
4 Replies

5. Shell Programming and Scripting

Why result is wrong here ? whether break statement is wrong ?

Hi ! all I am just trying to check range in my datafile pls tell me why its resulting wrong admin@IEEE:~/Desktop$ cat test.txt 0 28.4 5 28.4 10 28.4 15 28.5 20 28.5 25 28.6 30 28.6 35 28.7 40 28.7 45 28.7 50 28.8 55 28.8 60 28.8 65 28.1... (2 Replies)
Discussion started by: Akshay Hegde
2 Replies

6. Shell Programming and Scripting

Result of Catching Return Value from Sub_script.sh to Main_script.sh is not as Expected

Main_script.sh #! /bin/sh ./Sub_script.sh rc=$? echo "Return code from Sub_script.sh : $rc" if ; then echo "$rc = 991" echo "" exit 1 elif ; then echo "$rc = 992" echo "" exit 1 elif ; then echo "$rc = 0" echo "" exit 1 fi (2 Replies)
Discussion started by: duddukuri
2 Replies

7. Shell Programming and Scripting

How to search for string and return binary result?

Hi, I have a problem that I am sure someone will know the answer to. Currently I have a script which returns a binary output if it finds a certain search string (in this case relating to a DRBD cluster) as follows: searchstring="cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate" && echo... (3 Replies)
Discussion started by: almightybunghol
3 Replies

8. Solaris

df command on Sol8 machine doesn't return a result

I have a sun4u system running Solaris 8. I tried running the df command but it returns a blank result. Also I'm unable to collect an explorer from this system as the OS complains that the disk is full. What could be going on here? (10 Replies)
Discussion started by: dperry1973
10 Replies

9. UNIX for Dummies Questions & Answers

Any way to grep a string in directories and return the result with diskusage aswell?

What Im basically trying to do is this: I have a small script that can grep any parameter entered into a search string, then print to the screen the name of each file the parameter appears in as well as the file path, ie the directory. The code Im using just for this is.... Directory... (3 Replies)
Discussion started by: Eddeh
3 Replies

10. Shell Programming and Scripting

Pick up the return code for every iteration and display the result only once in loop.

Hi All, I amlearning UNIX scripting. I have a small query. I would be thankful if any one helps me out. I have a below piece of code which delets the files. If file dosent have the permissions to delete a particular file I have used 2>>operator to track the error code. But my objective is... (1 Reply)
Discussion started by: manas6
1 Replies
Login or Register to Ask a Question