bash或linux终端命令中可用的大多数排序都是关于字段(列)的排序。我不知道如何对三位数字进行排序,例如“ 1、3、2”。我希望它从左到右从小到大,例如“ 1,2,3”,反之亦然。
所以输入就像line =“ 5,3,10”。排序后,输出将为sorted_line =“ 3,5,10”。
有什么提示吗?谢谢。
答案 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