2010-08-10 7 views
2

Quelle est la meilleure façon de trier séparées par une virgule liste de valeurs sous Mac OS X:Tri d'une liste de valeurs séparées par des virgules

Entrée: "a, b, aaa, bc"

Sortie: « un , aaa, b, bc "

Je voudrais faire cela à partir du terminal afin que je puisse diriger la sortie vers une autre commande.

+0

Est-ce un fichier CSV complet (à savoir, les enregistrements séparés par les nouvelles lignes et valeurs indiquées peuvent contenir des virgules) ou des valeurs simplement délimité par une virgule et un espace? – Chuck

+0

Bonne question, juste des valeurs délimitées par une virgule et un espace. –

+0

Aussi, je ne me soucie pas de la sensibilité à la casse pour cela. Donc "A" et "a" sont considérés comme identiques. –

Répondre

4
$ echo "a, b, Aaa, bc" |egrep -o "[^, ]+" |sort -f | xargs |sed -e 's/ /, /g' 

si les valeurs contiennent des espaces:

$ echo "a, b, Aaa, bc" |egrep -o "[^, ][^,]*" |sort -f | xargs -I Q echo Q, | xargs 

mais vous obtenez un supplément "" gratuitement à la fin.

+0

C'est cool, je ne connaissais pas xargs. –

+0

'man xargs' est une bonne lecture, et la connexion à' find -print0' est aussi une bonne connaissance de base. – mvds

1
echo "a, b, Aaa, bc"|tr -s "[, ]" "\n"|sort|sed -e :a -e 'N;s/\n/,/;ba' 

echo "a, b, Aaa, bc"| tr -s "[, ]" "\n"|sort|tr "\n" ","|sed 's/,$//' 
+0

Il y a quelque chose qui ne va pas dans la partie sed, j'aime l'utilisation de tr si. –

+0

voir une autre méthode dans mon édition – ghostdog74

+0

presque là, sauf qu'il perd de l'espace après la virgule. –

0
echo 'a, b, aaa, bc' | awk '{split($0, a, ", "); n = asort(a); for (i=1; i<=n; i++) {printf a[i]; if (i<n) printf ", "}}' 
Questions connexes