I'm using bash shell. I want to parse one CSV file "A", search for that string in CSV file "B", and then output the value from the first column of the matching row in CSV file B. So I tried

while IFS=, read -r col1 name col3 col4 col5
    echo "I got:$name|$col5"
    value=`grep ${name} /tmp/accounts_created.csv | cut -d, -f${0}`
    echo "value:$value \n"
done < ~/Downloads/all_data.csv

but for some reason this isn't working out, despite the fact I know there is matching data in both files. Is there a better way to be doing this?

  • 1
    You didn't show any sample data. You should investigate the join command – glenn jackman Sep 25 '17 at 17:41
  • The better way is to use a CSV parser. For "small" data you might look f.i. at csvkit. – Satō Katsura Sep 25 '17 at 19:42

As what I'm understanding, you only need awk.

awk -F, 'NR==FNR{seen[$2]=1;next} /seen[$2] ~ $0/{print $1}
' ~/Downloads/all_data.csv /tmp/accounts_created.csv
  • Does awk deal with CSV formatting? THat is, one can't always split on a "," with CSVs since some cells may contain commas in them. – Dave Sep 25 '17 at 17:41
  • Yes, so we need sample input(s) and your expected output – αғsнιη Sep 25 '17 at 17:43

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.