C'è un programma di utilità Linux o un comando Bash posso usare per ordinare uno spazio stringa di numeri delimitata?spazio Ordinamento numeri delimitati con Linux/Bash
risposta
Ecco un semplice esempio per farti andare:
echo "81 4 6 12 3 0" | tr " " "\n" | sort -g
tr
traduce gli spazi che delimitano i numeri, in ritorni a capo, perché sorta utilizza ritorni a capo come delimitatori (vale a dire che è per l'ordinamento linee di testo). L'opzione -g
indica l'ordinamento da ordinare per "valore numerico generale".
man sort
per ulteriori dettagli su sort
.
$ s=(one two three four)
$ sorted=$(printf "%s\n" ${s[@]}|sort)
$ echo $sorted
four one three two
Questa è una variante risposta di ghostdog74 che è troppo grande per essere in un commento. Mostra le cifre anziché i nomi dei numeri e sia la stringa originale che il risultato sono in stringhe delimitate da spazi (anziché una matrice che diventa una stringa delimitata da una nuova riga).
$ 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
Se non è stato utilizzato il echo
quando si imposta il valore di sorted
, quindi la stringa è a capo di esso. In tal caso riecheggiandolo senza virgolette si mette tutto su una riga, ma, come lo farebbe eco con le virgolette, ogni numero apparirebbe sulla sua stessa riga. Questo è il caso se l'originale è un array o una stringa.
# 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
Utilizzando l'espansione di parametro Bash (per sostituire gli spazi con a capo) che possiamo fare:
str="3 2 11 15 8"
sort -n <<< "${str// /$'\n'}"
# alternative
NL=$'\n'
str="3 2 11 15 8"
sort -n <<< "${str// /${NL}}"
Se in realtà hanno una stringa delimitato da spazi di numeri, allora una delle altre risposte fornite avrebbe funzionato bene. Se la tua lista è un array bash, allora:
oldIFS="$IFS"
IFS=$'\n'
array=($(sort -g <<< "${array[*]}"))
IFS="$oldIFS"
potrebbe essere una soluzione migliore. Il delimitatore di nuova riga sarebbe utile se si desidera generalizzare l'ordinamento di una matrice di stringhe anziché di numeri.
la mia lista è un array bash, ma questo non funziona per me: 'packages =" $ (sort <<< $ {! Package2apk [@]}) "' – Jayen
$ awk 'BEGIN{split(ARGV[1], numbers);for(i in numbers) {print numbers[i]} }' \
"6 7 4 1 2 3" | sort -n
Mentre questo snippet di codice può essere la soluzione, [incluso una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entely- code-based-answers) aiuta davvero a migliorare la qualità del tuo post.Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. – yivi
Migliorare il bel Bash di Evan Krall "sorta di matrice", limitando l'ambito di IFS per un singolo comando:
printf "%q\n" "${IFS}"
array=(3 2 11 15 8)
array=($(IFS=$'\n' sort -n <<< "${array[*]}"))
echo "${array[@]}"
printf "%q\n" "${IFS}"
Questa è una variante da @JamesMorris risposta:
echo "81 4 6 12 3 0" | xargs -n1 | sort -g | xargs
Invece di tr
, io uso xargs -n1
per convertire in nuove linee. L'ultimo xargs
è di riconvertire, in una sequenza di numeri separati da spazi.
- 1. Regex: numeri interi delimitati da virgola
- 2. ordinamento stringa numeri
- 3. SQL Oracle Ordinamento stringa (numeri) e (lettere con numeri)
- 4. bash: stringhe di ordinamento con numeri
- 5. Numeri di ordinamento in NSArray?
- 6. ordinamento numeri interi veloci in haskell
- 7. Ordinamento di un elenco di numeri con costi modificati
- 8. Ordinamento di numeri in formato stringa con Python
- 9. Ordinamento pos/neg numeri con parti frazionarie usando Unix sorta
- 10. Ordinamento di numeri misti e stringhe
- 11. Ordinamento colonna stringa contenente numeri in SQL?
- 12. numeri di ordinamento in una riga
- 13. Ordinamento SQL per testo ASC, mostra numeri all'ultima posizione
- 14. ordinamento con più chiavi con comando di ordinamento Linux
- 15. Lettura file delimitati in C++
- 16. Aggiunta di spazio tra i numeri?
- 17. Ordinamento stringa alfanumerica decrescente
- 18. elenco di ordinamento di numeri in virgola mobile nei gruppi
- 19. Espressione regolare ripetibile e complessa, con punto '.' separatori delimitati
- 20. C# Leggi Text file contenente i dati delimitati da tabulazioni
- 21. Ordinamento stabile, ovvero ordinamento minimamente dirompente
- 22. Sostituzione di più blocchi delimitati in sed
- 23. Ordinamento topologico con funzione obiettivo
- 24. File delimitati da Excel e schede Domanda
- 25. separare le parole delimitati da spazi in una stringa
- 26. array_multisort con ordinamento naturale
- 27. CollectionViewSource con ordinamento personalizzato
- 28. Come leggere i numeri separati dallo spazio usando scanf
- 29. Ordinamento di un array con le stringhe che contiene i numeri
- 30. PHP - ordinamento di una matrice di nomi di file con numeri?
ho allegato un altro '| tr' con i parametri invertiti per recuperare una stringa delimitata dallo spazio. – isuldor
Per invertire l'ordinamento, usare '-r'. – Tim