如何对 bash 中的逗号分隔值进行排序?

How to sort comma separated values in bash?

我有一些数字,例如

7, 15, 6, 2, -9

我想在bash(从命令行或脚本文件)中像这样排序

-9, 2, 6, 7, 15

我该怎么做?我无法使用 sort 命令获取它。

echo "7, 15, 6, 2, -9" | sed -e $'s/,/\\n/g' | sort -n | tr '\n' ',' | sed 's/.$//'
  1. sed -e $'s/,/\\n/g': 用于将字符串按逗号分割成行。
  2. sort -n: 然后你可以使用按数字排序
  3. tr '\n' ',': 隐藏换行符回到逗号。
  4. sed 's/.$//': 删除尾部逗号。

不够优雅,但应该可以:p

perl

$ s='7, 15, 6, 2, -9'
$ echo "$s" | perl -F',\h*' -lane 'print join ", ", sort {$a <=> $b} @F'
-9, 2, 6, 7, 15
$ echo "$s" | perl -F',\h*' -lane 'print join ", ", sort {$b <=> $a} @F'
15, 7, 6, 2, -9
  • -F',\h*' 使用 , 和可选的 space/tab 作为字段分隔符
  • sort {$a <=> $b} @F 对数组进行数字排序,升序...使用 sort {$b <=> $a} @F' 降序
  • join ", " 告诉如何在传递给 print
  • 之前连接数组元素

总结答案和评论,这有效并保持空间:

echo "7, 15, 6, 2, -9" | sed -e $'s:,:\\n:g' | sort -n | paste -sd ',' - | sed 's:,:, :g'

请注意,您可以使用 sed -e 's:,:\n:g' 而不是第一个 sed 调用。这适用于我的系统 运行 bash 版本 4.2.46 和 sed 版本 4.2.2。要删除空格(或者如果它们不是必需的),请删除最后的 sed 调用和管道。