Bash sort CSV file contents line by line
Suppose you have a CSV file like this
pepperoni feta cheese mozzarella cheese beef,bacon,mozzarella cheese,onions,pineapple sausage pepperoni,artichokes four cheese
And you want to sort each lines contents alphabetically to this
pepperoni feta cheese mozzarella cheese bacon,beef,mozzarella cheese,onions,pineapple sausage artichokes,pepperoni four cheese
This script will do it line by line say it is called sortrows.sh
#!/bin/bash while IFS='' read -r line || [[ -n "$line" ]]; do sorted=`echo $line | egrep -o "[^,]+" | sort -f | paste -sd "," -` echo "$sorted" done < "$1"
- egrep -o "[^,]+" : Separate each lines contents by ,
- sort -f: Sort all the lines alphabetically
- paste -sd "," -: Paste the lines back together and separate by ,
Called in this manner
chmod 755 sortrows.sh ./sortrows.sh unsorted.csv > sorted.csv
It's not the fastest option, but it is decomposeable with bash pipelines.