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

时间:2017-12-06 01:03:54

标签: linux bash csv sorting comma

我有一些像

这样的数字

7, 15, 6, 2, -9

我想在bash(从命令行或脚本文件)中对此进行排序

-9, 2, 6, 7, 15

我该怎么做?我无法使用sort命令获得此功能。

3 个答案:

答案 0 :(得分:8)

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/.$//':删除尾随逗号。
  5. 不够优雅,但应该有效: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调用和管道。