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.