Using awk for match and print


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using awk for match and print
# 1  
Old 10-22-2015
Using awk for match and print

I have the need to match up the lat / lon from a fileA with the lat / lon and value from fileB. fileA is a small subset of fileB

I have the following awk script but it prints out all the contents from fileB. I only need the matches.

Code:
awk 'FNR==NR {A[$1,$2]=$NF; next} {A[$1"  ",$2]=$NF} END{for(i in A) printf "%s%7.2f\n",i,A[i]}'

fileA
Code:
24.5625 -81.8125
24.5625 -81.7708
24.6042 -81.6458

fileB
Code:
24.5625 -81.8125  275.8
24.5625 -81.7708  405.2
24.6042 -81.6458  321.7
30.6042  -91.7292  410.6
40.1875  -120.1875   75.9

expected output
Code:
24.5625 -81.8125  275.8
24.5625 -81.7708  405.2
24.6042 -81.6458  321.7

Any tips are appreciated.
Thanks
# 2  
Old 10-22-2015
Could you imagine somebody does not know what lat is nor lon? Assuming we're talking of fields 1 and 2 in either file, try
Code:
awk 'FNR==NR {T[$1,$2]++; next} ($1,$2) in T' file1 file2
24.5625 -81.8125  275.8
24.5625 -81.7708  405.2
24.6042 -81.6458  321.7

This User Gave Thanks to RudiC For This Post:
# 3  
Old 10-22-2015
Yes. I am talking about Fields 1 and 2 of fileA matching Fields 1 and 2 of fileb and printing Fields 1, 2, and 3 when there is a match.

RudiC, I am not getting any output from your suggestion.
# 4  
Old 10-22-2015
What operating system and shell are you using? If you're using a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk or nawk.

Is your fileA in DOS format with <carriage-return><newline> line terminators instead of UNIX format <newline> line terminators? If so, change RudiC's script to:
Code:
awk '{sub(/\r$/,""}FNR==NR {T[$1,$2]++; next} ($1,$2) in T' fileA fileB

This User Gave Thanks to Don Cragun For This Post:
# 5  
Old 10-22-2015
Thanks to you both. Once I removed the carriage returns, I was able to use RudiC's script.
# 6  
Old 10-22-2015
Curious if it woks on other systems than Gnu/Linux.
Code:
sed 'H;' < fileA | xargs -I latlon sed -n '/latlon/p' fileB

24.5625 -81.8125  275.8
24.5625 -81.7708  405.2
24.6042 -81.6458  321.7

---------- Post updated at 07:25 PM ---------- Previous update was at 07:24 PM ----------

Ooops!

Last edited by Don Cragun; 10-23-2015 at 07:57 AM.. Reason: Fix CODE tags & auto-spell check induced typo.
# 7  
Old 10-23-2015
BTW, why not
Code:
grep -f file1 file2
24.5625 -81.8125  275.8
24.5625 -81.7708  405.2
24.6042 -81.6458  321.7

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk script to match string and print status

Dear team, Need support to built awk script for below requirement Input file LOTC cluster state: ------------------- Node safNode=SC_2_1 joined cluster | Node safNode=SC_2_2 joined cluster | Node safNode=PL_2_3 fail cluster | AMF cluster state: ------------------... (16 Replies)
Discussion started by: shanul karim
16 Replies

2. Shell Programming and Scripting

awk to print match or non-match and select fields/patterns for non-matches

In the awk below I am trying to output those lines that Match between file1 and file2, those Missing in file1, and those missing in file2. Using each $1,$2,$4,$5 value as a key to match on, that is if those 4 fields are found in both files the match, but if those 4 fields are not found then missing... (0 Replies)
Discussion started by: cmccabe
0 Replies

3. Shell Programming and Scripting

awk Match and Print

I have the following script in place that will print the values of FileB when the first column matches File A's first column. awk 'NR == FNR {A=$2;next};$1 in A {print $1,$NF,$2,$3,A}' FileA FileB Input FileA 3013 4 FileB 3013 2009 03 JUNK 43 Output 3013 43 2009 03 (2 Replies)
Discussion started by: ncwxpanther
2 Replies

4. Shell Programming and Scripting

awk script to match and print

I need a script that will search for a string from column 1 in file A and when the string matches the last column in file B, print columns 1, 2 (file A) and columns 2, 3 (file B). input file A stringtomatch1 a stringtomatch2 a stringtomatch3 b file B junkcolumn1 printcolumn2... (4 Replies)
Discussion started by: ncwxpanther
4 Replies

5. Shell Programming and Scripting

awk if condition match and print all

Hi, I am trying to do something like this ... I use awk to match a pattern, and then print out all col. My code is : awk '{if ($1 ==300) print $1,$2-'$sbin7',$3}' tmp.txt output= 300 2 whereby sbin7=2, The thing is, I want to print all col and row, not just the matched line/row only, but... (10 Replies)
Discussion started by: horsepower
10 Replies

6. Shell Programming and Scripting

awk Help: Horizontal to Vertical print with pattern match

Hi AWK Experts, Following is the data : BRH113 DD AA HH CA DD DD AA HH BRH091 A4 A6 AH H7 67 HH J8 9J BRH0991 AA D8 C23 V5 H7 BR2 BRH991 AA HH GG5 BT0 JJ0 I want the output to be alligned with the pattern matching "BRH" inthe line. The output should be look like: A]... (4 Replies)
Discussion started by: rveri
4 Replies

7. Shell Programming and Scripting

Print strings that match pattern with awk

I have a file with many lines which contain strings like .. etc. But with no rule regarding field separators or anything else. I want to print ONLY THE STRING from each line , not the entire line !!! For example from the lines : Flow on service executed with success in . Performances... (5 Replies)
Discussion started by: black_fender
5 Replies

8. Shell Programming and Scripting

AWK match and print

I have thousands of tables compiled in a single txt document that I'm parsing with AWK. Scattered throughout the document in random sections I would like to parse out the sections that look like this: 1 Seq. Descrição do bem Tipo do bem Valor do bem (R$) 2 1 LOCALIZADO ANA RUA PESSEGO N 96... (3 Replies)
Discussion started by: daveyabe
3 Replies

9. UNIX for Dummies Questions & Answers

Awk print all lines on match?

Ok so I can use awk to match a pattern and print the whole line with print $0. Is there any way to just tell awk to print every line of output when the pattern matches? I'm having it wait for the word error and then print that entire line. But what I actually need to see is all the following... (9 Replies)
Discussion started by: MrEddy
9 Replies

10. Shell Programming and Scripting

AWK, print no of records after pattern match.

Hi ALL :). i have a file, cat 3 + dog 5 + rat 6 - i want to print no of record having pattern "+". thanks in advance :confused:. (2 Replies)
Discussion started by: admax
2 Replies
Login or Register to Ask a Question