是否可以使用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