I'm matching 3 columns between a large csv file and a small csv file and writing these to an output file. There are many questions on here that have helped but I can't find the answer to the specific problem I'm running into. When the column entry is shorter, it's not finding the match.

My solution is based on the solution here: compare two columns of different files and print if it matches

The matching columns should be small1 == large120002, small2 == large120003, small3 == large120004.

What I am trying...

awk -F, 'NR==FNR{c[$1,$2,$3]++;next};c[$120002,$120003,$120004] > 0' small.csv large.csv > output.csv

This works, sort of. This excludes those rows where large120002 is an int less than 9 characters in length. (So far values for large120002 are 7-9 characters long).

Ever run into this problem before? If possible I would like to stick with an awk solution.

  • Thanks for deleting that comma bro. 6th grade English class I was known for my run-on sentences. Solid edit.
    – Chinntimes
    Apr 24 '18 at 0:23

Turned out it was a casting issue, so I added 0 to the columns to make sure both were being treated the same by awk.

With the help of: https://stackoverflow.com/questions/5808971/casting-to-int-in-awk

This wound up working..

awk -F, 'NR==FNR{c[$1+0,$2,$3]++;next};c[$120002+0,$120003,$120004] > 0' small.csv large.csv > output.csv

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.