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 cheeseAnd 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 cheeseThis 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.csvIt's not the fastest option, but it is decomposeable with bash pipelines.