如何对 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/.$//'
sed -e $'s/,/\\n/g'
: 用于将字符串按逗号分割成行。
sort -n
: 然后你可以使用按数字排序
tr '\n' ','
: 隐藏换行符回到逗号。
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 作为字段分隔符
- 有关命令行选项的说明,请参阅 https://perldoc.perl.org/perlrun.html#Command-Switches
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
调用和管道。
我有一些数字,例如
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/.$//'
sed -e $'s/,/\\n/g'
: 用于将字符串按逗号分割成行。sort -n
: 然后你可以使用按数字排序tr '\n' ','
: 隐藏换行符回到逗号。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 作为字段分隔符- 有关命令行选项的说明,请参阅 https://perldoc.perl.org/perlrun.html#Command-Switches
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
调用和管道。