2010-08-10 193 views
2

什么是排序逗号最简单的方法在Mac OS X分隔的值列表的列表:排序逗号分隔值

输入: “A,B,AAA,BC”

输出:“一个,aaa,b,bc“

我想从终端执行此操作,以便可以将输出传送到另一个命令。

+0

这是一个完整的CSV(即通过换行和引用的值分开记录可以包含逗号),或者只是值之间用逗号和空格分隔? – Chuck 2010-08-10 00:25:23

+0

好问题,只是由逗号和空格分隔的值。 – 2010-08-10 00:26:38

+0

此外,我不关心这种情况下的大小写敏感度。所以“A”和“a”被认为是相同的。 – 2010-08-10 00:28:13

回答

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

如果值包含空格:

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

但你得到一个额外的 “” 在年底免费。

+0

这很酷,我不知道xargs。 – 2010-08-10 00:55:16

+0

'man xargs'很好读,连接到'find -print0'也是很好的基础知识。 – mvds 2010-08-10 02:21:48

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

sed部分出了问题,我喜欢使用tr。 – 2010-08-10 01:13:51

+0

几乎在我的编辑 – ghostdog74 2010-08-10 01:40:29

+0

中看到另一种方法,除了它在逗号后失去空间。 – 2010-08-11 17:14:41

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 ", "}}'