Compare 2 files, awk maybe?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Compare 2 files, awk maybe?
# 1  
Old 05-18-2014
Compare 2 files, awk maybe?

I have 2 files,
file1:
Code:
alfa     numbers numbers 
vita     numbers numbers
gama   numbers numbers
delta    numbers numbers
epsilon numbers numbers
zita      numbers numbers
...

file2:
Code:
'zita'    keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers keepnumbers
'misc'  keepnumbers keepnumbers keepnumbers
'alfa'    keepnumbers keepnumbers keepnumbers
...

and I want to
print the lines of file2
of which the first word (in the first column)
matches with the first word of file 1 (in the first column), BUT keep the order of first file.
The output should look like
Code:
'alfa'    keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers keepnumbers
'zita'    keepnumbers keepnumbers keepnumbers

I have already tried with
Code:
awk 'NR==FNR{a[$1]++;next}a[$1]' file1 file2 > file3

but the order in file3 is like file2.
Moreover awk hits in the quote symbol ' is there a way to ignore it and read only the name inside quotes?
Thanks in advance for the help and time

Last edited by Don Cragun; 05-18-2014 at 10:06 PM.. Reason: Add CODE tags.
# 2  
Old 05-18-2014
Would that work?

Code:
awk 'NR==FNR{gsub("\47", "", $1); a[$1]=$0;next} {if( $1 in a) {print a[$1]}}' file2 file1 > file3

This User Gave Thanks to Aia For This Post:
# 3  
Old 05-18-2014
To exactly match the requested output, you could try:
Code:
awk -v sq="'" '
FNR == NR {
	d[$1] = $0
	next
}
(sq $1 sq) in d {
	print d[sq $1 sq]
}' file2 file1 > file3

This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 05-18-2014
It works but I have a problem because the first word in some lines has a space in the end like 'alfa

Quote:
Originally Posted by Don Cragun
To exactly match the requested output, you could try:
Code:
awk -v sq="'" '
FNR == NR {
    d[$1] = $0
    next
}
(sq $1 sq) in d {
    print d[sq $1 sq]
}' file2 file1 > file3

It works but I have a problem because the first word in some lines has a space in the end like
Code:
 'alfa '   keepnumbers keepnumbers

do you know a way to overcome it? Thank you very much! For the recomendations too!

Last edited by phaethon; 05-18-2014 at 11:19 PM..
# 5  
Old 05-18-2014
Assuming that you want to keep 'alfa ' in the output.

Code:
awk 'NR==FNR{t=$1; gsub("\47", "", t); a[t]=$0; next} {if( $1 in a) {print a[$1]}}' file2 file1 > file3

This User Gave Thanks to Aia For This Post:
# 6  
Old 05-18-2014
Or you could try:
Code:
awk -F " *'" '
FNR == NR {
	d[$2] = $0
	next
}
$1 in d {
	print d[$1]
}' file2 FS=' ' file1 > file3

This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 05-19-2014
Both of your codes worked! thank you very much!

One last question: what can I do if i want to remove the space
when it is followed by single quote from wherever it is inside the file?
The point is to keep the single quote in the previous and next words of a column.
e.g.
Code:
 'numbers1' 'te1 ' text 
 'numbers2' 'te2 ' text 
...

will have to result the output:
Code:
 'numbers1' 'te1' text
 'numbers2' 'te2' text
...

Note to mention that only 4 characters exist inside the problematic quotes (like 'tes ') including the space.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[awk] Compare two files

HI!! I am trying to compare two files using AWK but I have some problems. I need to count how many times letters are used in two texts. This is my script { long=length($0) for (i=1;i<=long;i++) { aux=substr($0,i,1) if ( aux != " " && aux != "" ) ... (7 Replies)
Discussion started by: ettore8888
7 Replies

2. Shell Programming and Scripting

awk compare files

I have a below requirement and trying to compare the files using awk File 1 - Already stored on a prev day id | text | email id --------------------------------- 89564|this is line 1 | xyz@sample.txt 985384|this is line 2 | abc@sample.txt 657342|this is line 3 |... (3 Replies)
Discussion started by: rakesh_411
3 Replies

3. HP-UX

Awk compare two files

Hi guys, I have 2 files: File1 ABC|2203|115.50 ABC|2288|328.12 ABC|2289|611.09 ABC|2290|698 DEF|1513|721.3 DEF|1514|40 DEF|1515|5 File2 ABC|2288|328.12 ABC|2289|666.08 ABC|2290|698.00 DEF|1513|721.30 (3 Replies)
Discussion started by: Eduardo Aceves
3 Replies

4. Shell Programming and Scripting

Compare files using awk

Please help me to compare two files and remove the items in file2 from file1 file 1:delimited using pipe(|) file1 00012|Description - 1|||||AA12345|1|AB12345|2|2012/06/03 AB123|Description - 2|||||AA12345|3|ZA11111|4|2012/06/04 11111|Description - 3|||||AP00012|1|AB12345|2|2012/06/03... (8 Replies)
Discussion started by: Mary James
8 Replies

5. Shell Programming and Scripting

awk command to compare a file with set of files in a directory using 'awk'

Hi, I have a situation to compare one file, say file1.txt with a set of files in directory.The directory contains more than 100 files. To be more precise, the requirement is to compare the first field of file1.txt with the first field in all the files in the directory.The files in the... (10 Replies)
Discussion started by: anandek
10 Replies

6. Shell Programming and Scripting

Compare two files with awk

Hello, I have a script which extracts the values from a csv file when a specific date is entered : #!/bin/sh awk 'BEGIN{printf("Entrez la date : "); getline date < "-"} $0 ~ date {f=1;print;next} /^{2}\//{f=0} f' file1.csv This script gives me a number of lines with different values. ... (6 Replies)
Discussion started by: freyr
6 Replies

7. UNIX for Dummies Questions & Answers

Using AWK to compare 2 files

Hi How can I use awk to compare specific columns in 2 files and print the difference. I currently have this: BEGIN { OFS = FS = "," } NR == FNR { b = $3 next } { e = "" for (x in b) { if (match ($1, x)) { if (RSTART == 1 && RLENGTH > length(e)) { e=x (2 Replies)
Discussion started by: ladyAnne
2 Replies

8. Shell Programming and Scripting

compare two files using awk

Hi, I want to compare two files using awk and write an output based on if the records matched. Both the files are space delimitted. File A: 8351 00000000000636 2009044 -00001.000 8351 00000000000637 2009044 -00002.000 8351 00000000000638 2009044 -00001.000 8351 00000000000640... (7 Replies)
Discussion started by: gpaulose
7 Replies

9. Shell Programming and Scripting

Compare two files using awk

Hi. I'm new to awk and have searched for a solution to my problem, but haven't found the right answer yet. I have two files that look like this: file1 Delete,3105551234 Delete,3105551236 Delete,5625559876 Delete,5625556789 Delete,5625553456 Delete,5625551234 Delete,5625556956... (8 Replies)
Discussion started by: paul.o
8 Replies

10. Shell Programming and Scripting

awk compare 2 files

Hi i hope some awk gurus here can help me.. here is what i need i have 2 files: File1 152445 516532 405088.pdf 152445 516533 405089.pdf 152491 516668 405153.jpg 152491 520977 408779.jpg 152491 0 409265.pdf File2 516532 /tmp/MainStreet_Sum09_Front_FNL.pdf 516533... (9 Replies)
Discussion started by: kenray
9 Replies
Login or Register to Ask a Question

Featured Tech Videos