Comparing 2 files using awk , not getting any results - C shell


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Comparing 2 files using awk , not getting any results - C shell
# 1  
Old 04-26-2019
Comparing 2 files using awk , not getting any results - C shell

I am using c shell and trying to compare 2 files using awk . But the below awk statement doesnt give any result. Pls. advise why am not getting the desired o/p with the corrected awk script.
Need to acheive this solution in awk using C shell.

Code:
awk 'FNR==NR{a[$0]++;next} 
{for(i in a)
 {if ( a[i]=$0 )
  {
   continue   
  else
     print $0
  }  
}' cmp1 cmp2

cmp1 file
=====
Code:
file:tst1
md5sum:aED567ZZZ
rowcount:1256

cmp2 file
=======
Code:
file:tst1
md5sum:AED567ZZZ
rowcount:1257

o/p expected
============
Code:
rowcount:1257


Last edited by jim mcnamara; 04-26-2019 at 05:20 PM..
# 2  
Old 04-26-2019
the diff command is standard in any modern unix and does what you want, I think.
try:
Code:
diff cmp1 cmp2

And see if that will do what you need. It adds a little extra information so you can tell which file has what.

If you tell us your OS it might help - diff implementations may have extra options
# 3  
Old 04-26-2019
You have several syntax and semantic errors in your script, like the usage of braces in the if construct, the usage of = for comparison in lieu of ==, and the assumption a[i] would contain a string equivalent to a former $0 (in fact, the index i is the string, a[i] has a count value, 1 in above example). On top, the for loop will run across all three elements of a , printing the desired string thrice.



And, your expected output is not correct for the sample input files given (as "A" != "a" in line 2).


Try instead (pls be aware that proper indenting helps reading and understanding a code snippet tremendously):

Code:
awk '
FNR==NR {a[$0]++;
         next
        } 

!($0 in a)

'  file[12]
md5sum:AED567ZZZ
rowcount:1257

This User Gave Thanks to RudiC For This Post:
# 4  
Old 04-26-2019
As ! has a special meaning in C shell, will this work? Thinking we need to escape with \!($0 in a). Pls. advise.

How about using the below script , will this work in C shell?

Code:
awk '
 last=NR; 
	next
        }
{for(i=1;i<=last;i++)
 {
   if (a[i]==$0)
   {
	continue
   else
     print $0
   }
 }' file[12]

# 5  
Old 04-26-2019
! has a special meaning elsewhere in other systems. But. No "shell meaning" inside of a set of single tics, which is why the awk script must be set inside a pair of single tics, too.
# 6  
Old 04-27-2019
You said C shell, and you really mean csh or tcsh?
C shell is nasty. It does history substiution even within ' ' and even if the shell is non-interactive or in scripts.
Within ' ' the only safe escape of the ! is '\!' (like the ' to be escaped as '\'').
Further, C shell does not take a multiline string. Try to put a \ at the end of each line.

Learn the standard shell, and recode your scripts! It is straight forward; the standard shell can do everything the C shell can.
These 2 Users Gave Thanks to MadeInGermany For This Post:
# 7  
Old 04-28-2019
I am using C shell. As per your advise i had this change will this work in C shell.
Code:
awk 'FNR==NR {a[$0]++; next} '\!''($0 in a)'  file[12]

Addl. queries.
-What do you mean by standard shell??
-What i see in echo $SHELL is /bin/csh. If we want to change the login shell and execute the same above command for it to work in the other compatible shells. Tell me what should be the syntax for it to work.
-If we need to sort the files, cmp1 and cmp2 before passing to the awk command , what should be the working command in C shell and other compatible shells

Last edited by rbatte1; 04-29-2019 at 06:32 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Comparing fields of two files and displaying results

Hello , I am trying to compare two files i.e one master file and the other exclusion file. If the second field of masterfile is oracle8 then I need to compare the 3rd field of master file with the 1st field of all the rows of exclusion file else I need to compare 2nd field from master file with... (2 Replies)
Discussion started by: rahul2662
2 Replies

2. Shell Programming and Scripting

awk for comparing two files

so have file1 like this: joe 123 jane 456 and then file2 like this: 123 left right 456 up down joe ding dong jane flip flop what I need to do is compare col1 and col2 in file1 with col1 in file2 and generate a new file that has lines like this: joe 123 ding dong left right jane... (11 Replies)
Discussion started by: Jaymz
11 Replies

3. Shell Programming and Scripting

Comparing the matches in two files using awk when both files have their own field separators

I've two files with data like below: file1.txt: AAA,Apples,123 BBB,Bananas,124 CCC,Carrot,125 file2.txt: Store1|AAA|123|11 Store2|BBB|124|23 Store3|CCC|125|57 Store4|DDD|126|38 So,the field separator in file1.txt is a comma and in file2.txt,it is | Now,the output should be... (2 Replies)
Discussion started by: asyed
2 Replies

4. UNIX for Advanced & Expert Users

Comparing two files using awk

i have one file say file1 having many records.Each record contains 2000 characters.i have to compare 192-200 (stored as name)characters in this file from other file say file2 having name stored in 1-9 characters. after comparing i have to print the record from file1 in another file say file3 ... (3 Replies)
Discussion started by: sonam273
3 Replies

5. Shell Programming and Scripting

awk script to parse results from TWO files

I am trying to parse two files and get data that does not match in one of the columns ( column 3 in my case ) Data for two files are as follows A.txt ===== abc 10 5 0 1 16 xyz 16 1 1 0 18 efg 30 8 0 2 40 ijk 22 2 0 1 25 B.txt ===== abc... (6 Replies)
Discussion started by: roger67
6 Replies

6. Shell Programming and Scripting

comparing two files using awk

hit brick wall while trying to knock up a script that will take values from the "lookup" file and look it up in the "target" file and return values that dont appear in "target" but do in "lookup". just knocked up something using bits from previous threads but theres gotta be something wrong... (13 Replies)
Discussion started by: jack.bauer
13 Replies

7. Shell Programming and Scripting

awk - Matching columns between 2 files and reordering results

I am trying to match 4 colums (first_name,last_name,dob,ssn) between 2 files and when there is an exact match I need to write out these matches to a new file with a combination of fields from file1 and file2. I've managed to come up with a way to match these 2 files based on the columns (see below)... (7 Replies)
Discussion started by: ambroze
7 Replies

8. Shell Programming and Scripting

awk - comparing files

I've been trying to use awk to compare two files that have pretty much the same data in apart from certain lines where in one file a fields value has changed. I want to print the line from the first file and the changed line from the second file. At the moment, all I can get it to do is print the... (6 Replies)
Discussion started by: dbrundrett
6 Replies

9. Shell Programming and Scripting

Can awk do lookups to other files and process results

I know that 'brute-force' scripting could accomplish this with lots of cat/echo/cut/grep and more. But, because my real file has 800k records, and the matching files have 10-20k records, this is not time-possible or efficient. I have input file: > cat file_in... (4 Replies)
Discussion started by: joeyg
4 Replies

10. Shell Programming and Scripting

comparing two files using awk.

Hi All, a new bie to awk, How to compare substring of col1,file 1 with col2file2 and get file1contents+col3file2 as output. file1 ----- kumarfghh,23,12000,5000 rajakumar,24,14000,2500 rajeshchauhan,25,16000,2600 manoj,26,17000,2300 file 2 -------- 123,kumar,US, 123,sukumar,UK... (4 Replies)
Discussion started by: jerome Sukumar
4 Replies
Login or Register to Ask a Question