CSV files are very common. Using them with Bash to aid in scripting can be very useful. Here are a some methods of using bash to work with CSV files. These are what I sometimes use when dealing with CSV files in bash, they may work for your CSV’s they may not. I accept no responsibility of the accuracy of these, I’m sure there are better ways of accomplishing the same tasks. If anybody finds other ways or knows better please comment and let me know. Don’t run these on production data, its always a good idea to make backups and test them before using in a production environment. Who knows how your precious data could become mangled due to a wrong number of quotes, terminations or bad regex. Jump for the post (Read on …)
Here are some techniques that you can use in your bash scripts for finding and searching through files. Combined with other shell scripting techniques these can be very powerful.
Find all files in the current directory and print them:
find . -iname “.jpg”
Find all files that you have access to read with matching patern:
find / -iname “pattern”
Normally with grep text is matched and is case sensitive. Heres how to do a case insensitive search with grep:
cat <filename> | grep -i <match>
Finding and replacing text is easily done in bash with sed. This find and replace puts the contents into a new file:
cat <filename> | sed ‘s/FIND/REPLACE/’ > <new filename>
Finding the line number that a particular line of text is on is sometimes useful. Here is how to do it:
cat <filename> | grep -n <match>
Looping over a file in bash and echoing the output is sometimes useful for the processing of text files. Heres how to do it:
cat <filename> | while read i; do echo $i; done
Thats about all the bash scripting techniques that I can currently think of for finding in files. I know there are a ton more that I use but its hard to write them all down at once. As I come up with them or solve a problem I’ll add them here. If you have any of your own, please leave them in the comments.
As you may know if you are a regular reader I own a Toshiba Tecra M2. One of the things that annoyed me was I had to turn the brightness up every time my computer came out of standby mode. A fix for this is to adjust the brightness every time the computer comes out of standby mode.
The script is intended to be run under cron. I have mine set up to suspend after 5 minutes of the lid being closed.
if [ $(cat /proc/acpi/button/lid/LID/state | sed 's/state: //') == "closed" ]; then
VAR=$(cat /proc/acpi/toshiba/lcd | sed ‘s/brightness: //’ grep -v levels);
sudo su -c “echo mem > /sys/power/state”;
if [ $VAR -eq 1 ]; then
elif [ $VAR -eq 7 ]; then
if [ $ACTION == "ADD" ]; then
VAR=$(($VAR + 1));
VAR=$(($VAR – 1));
sudo su -c “echo brightness:$(echo $VAR) > /proc/acpi/toshiba/lcd”;
I run this with the following cron entry:
*/5 * * * * sh hibernate.sh
The script first checks the current brightness. If the brightness is currently 1 or 7 it adjusts the mathematic operation so that when the laptop is opened the brightness is adjusted. Basically if the brightness is one, it adds one. If the brightness is 7 or any other value it subtracts one. This is currently working out quite well for me. I don’t know how useful this is to any body else, unless you happen to have a Toshiba that is doing the same thing but it should give you a good overall idea of how to perform basic mathematic operations in bash.