我有一些像
这样的数字 7, 15, 6, 2, -9
我想在bash(从命令行或脚本文件)中对此进行排序
-9, 2, 6, 7, 15
我该怎么做?我无法使用sort命令获得此功能。
答案 0 :(得分:8)
echo "7, 15, 6, 2, -9" | sed -e $'s/,/\\\n/g' | sort -n | tr '\n' ',' | sed 's/.$//'
sed -e $'s/,/\\\n/g'
:用逗号分隔字符串。sort -n
:然后您可以使用按数字排序tr '\n' ','
:将新线分隔符隐藏回逗号。sed 's/.$//'
:删除尾随逗号。不够优雅,但应该有效:p
答案 1 :(得分:0)
使用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*'
使用,
和可选空格/制表符作为字段分隔符
sort {$a <=> $b} @F
按数字排序数组,按升序排序...使用sort {$b <=> $a} @F'
降序排列join ", "
讲述了在传递打印之前如何连接数组元素答案 2 :(得分:0)
总结答案和评论,可以有效地保持空格:
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
调用和管道。