如何在BASH的一行中排序ROW

时间:2018-12-21 19:03:35

标签: bash

bash或linux终端命令中可用的大多数排序都是关于字段(列)的排序。我不知道如何对三位数字进行排序,例如“ 1、3、2”。我希望它从左到右从小到大,例如“ 1,2,3”,反之亦然。

所以输入就像line =“ 5,3,10”。排序后,输出将为sorted_line =“ 3,5,10”。

有什么提示吗?谢谢。

2 个答案:

答案 0 :(得分:1)

这是一种方式:

echo "6 5,4,9 1,3 2,10,7 8" | awk '{ split($0,arr,"(,| )") ; asort(arr); exit; } END{ for ( i=1; i <= length(arr) ; i++ ) { print arr[i]} }'

我使用正则表达式作为分隔符,因此可以用逗号或空格分隔。

希望有帮助!

答案 1 :(得分:1)

请注意,asort适用于gawk,而不适用于一般的awk。因此,这是文件a.txt的另一种解决方案

gawk -F, '{split($0, w); s=""; for(i=1; i<=asort(w); i++) s=s w[i] ","; print s }' a.txt | sed 's/,$//'

示例文件a.txt是

1,5,7,2
8,1,3,4
9,7,8,2

结果

1,2,5,7
1,3,4,8
2,7,8,9