I am trying to parse a CSV containing potentially 100k+ lines. Here is the criteria I have:
I would like to retrieve all lines in the CSV that have the given value in the given index (delimited by commas).
Any ideas, taking in special consideration for performance?
$() Command Substitution According to the official GNU Bash Reference manual: “Command substitution allows the output of a command to replace the command itself.
So just in case you are using a text only browser, or need to cut and paste, Lukas's answer is to go into your command line, navigate to the right directory and type the command: “cut -d, -f3 report_source. csv | sed 's/”//g > report_links. txt” (without the quotes).
As an alternative to cut
- or awk
-based one-liners, you could use the specialized csvtool
aka ocaml-csv
:
$ csvtool -t ',' col "$index" - < csvfile | grep "$value"
According to the docs, it handles escaping, quoting, etc.
See this youtube video: BASH scripting lesson 10 working with CSV files
CSV file:
Bob Brown;Manager;16581;Main Sally Seaforth;Director;4678;HOME
Bash script:
#!/bin/bash OLDIFS=$IFS IFS=";" while read user job uid location do echo -e "$user \ ======================\n\ Role :\t $job\n\ ID :\t $uid\n\ SITE :\t $location\n" done < $1 IFS=$OLDIFS
Output:
Bob Brown ====================== Role : Manager ID : 16581 SITE : Main Sally Seaforth ====================== Role : Director ID : 4678 SITE : HOME
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With