是否可以使用Linux实用程序或Bash命令对空格分隔的数字字符串进行排序?使用Linux/Bash对空格分隔的数字进行排序
回答
这里有一个简单的例子,让你去:
echo "81 4 6 12 3 0" | tr " " "\n" | sort -g
tr
转换的空间界定的数字,到回车,因为排序使用回车作为分隔符(即它是用于排序线的文字)。 -g
选项告诉排序按“一般数值”进行排序。
man sort
关于sort
的更多细节。
$ s=(one two three four)
$ sorted=$(printf "%s\n" ${s[@]}|sort)
$ echo $sorted
four one three two
这是太大而不能在评论ghostdog74的回答的变化。它显示的是数字而不是数字的名称,原始字符串和结果都以空格分隔的字符串(而不是数组成为换行符分隔的字符串)。
$ s="3 2 11 15 8"
$ sorted=$(echo $(printf "%s\n" $s | sort -n))
$ echo $sorted
2 3 8 11 15
$ echo "$sorted"
2 3 8 11 15
如果你设置的sorted
值时没有使用echo
,则该字符串中有换行符。在这种情况下,不用引号就可以将它全部放在一行上,但是,如引用的引用所表明的那样,每个数字都会出现在它自己的行上。无论原始数组还是字符串,都是这种情况。
# demo
$ s="3 2 11 15 8"
$ sorted=$(printf "%s\n" $s | sort -n)
$ echo $sorted
2 3 8 11 15
$ echo "$sorted"
2
3
8
11
15
使用bash参数展开(替换用换行空格),我们可以这样做:
str="3 2 11 15 8"
sort -n <<< "${str// /$'\n'}"
# alternative
NL=$'\n'
str="3 2 11 15 8"
sort -n <<< "${str// /${NL}}"
如果你确实有号码的空间分隔的字符串,然后提供将工作的其他答案之一精细。如果您的列表是bash阵列,则:
oldIFS="$IFS"
IFS=$'\n'
array=($(sort -g <<< "${array[*]}"))
IFS="$oldIFS"
可能是更好的解决方案。如果你想推广到一个字符串数组而不是数字,换行符分隔符会有所帮助。
我的列表是一个bash数组,但这不适用于我:'packages =“$(sort <<< $ {!package2apk [@]})”' – Jayen 2014-06-16 11:00:30
$ awk 'BEGIN{split(ARGV[1], numbers);for(i in numbers) {print numbers[i]} }' \
"6 7 4 1 2 3" | sort -n
虽然此代码片段可能是解决方案,[包括一个解释](// meta.stackexchange.com/questions/114762/explaining-entirely-基于代码的答案)确实有助于提高你的文章的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – yivi 2017-11-07 20:09:34
通过IFS的范围限制到单个命令提高上埃文克劳的nice击 “数组排序”:
printf "%q\n" "${IFS}"
array=(3 2 11 15 8)
array=($(IFS=$'\n' sort -n <<< "${array[*]}"))
echo "${array[@]}"
printf "%q\n" "${IFS}"
这是从@JamesMorris答案的变化:
echo "81 4 6 12 3 0" | xargs -n1 | sort -g | xargs
而不是tr
,我用xargs -n1
转换为新行。最后的xargs
将转换回空格分隔的数字序列。
- 1. 如何在文件中对空格分隔字符串进行排序?
- 2. 使用空格对字符串值进行排序
- 3. 排序空格分隔数的字符串列表
- 4. 如何对逗号分隔的字符串进行排序?
- 5. 如何使用数字排序对varchar列进行排序
- 6. 如何使用其他值对空格进行冒泡排序?
- 7. 如何使用linux shell排序使用多字符分隔符对文件进行排序?
- 8. 用C++对数字进行排序
- 9. (C)使用strtok()进行空格分隔的子串?
- 10. 使用空格分隔字符串
- 11. (C++)在由空格分隔的字符串中分隔数字
- 12. 使用有限数据对非数字对象进行排序
- 13. 按降序对数字进行排序
- 14. 按升序对数字进行排序
- 15. 对可变长度的字符分隔字符串进行排序
- 16. 使用数字对包含字符串的Arraylist进行排序
- 17. 使用自定义compareFunction对数据网格进行Flex排序(排序数字和文本字母数字)
- 18. 对JTable中的数字进行排序
- 19. 如何读取和排序仅由空格分隔的数据?
- 20. 按自然顺序对字符串数组进行排序并忽略空格
- 21. 解析字符串,空格分隔,排序但可选元素
- 22. 在mysql varcharfield中对hypen分隔的值进行排序
- 23. c#对一个制表符分隔的文件进行排序
- 24. 按分隔符后的所有内容对CSV进行排序
- 25. 使用d3js对数组进行排序
- 26. 使用usort对数组进行排序?
- 27. 使用qsort对数组进行排序
- 28. 使用Java对数组进行排序
- 29. 使用Ext.util.Sortable对数组进行排序
- 30. 使用Eloquent对数据进行排序
我附加了另一个'| tr'与参数相反以获得空格分隔的字符串。 – isuldor 2012-11-03 03:04:20
要反转排序,请使用'-r'。 – Tim 2016-02-18 11:15:28