Wie genau sortieren? Das scheint eine völlig willkürliche Sortierreihenfolge zu sein. Und das sind keine Zahlen. Außerdem hast du chrM vergessen. Bitte bearbeiten Sie Ihre Frage und klären Sie. Was genau versuchst du zu tun?
Wie @terdon bemerkte, wird dies durch die Einbeziehung von Xund Yund die Tatsache, dass die Zahlen zwischen 1 und 22 liegen, als mögliche Liste menschlicher Chromosomen identifiziert (weshalb er sagt, dass Chromosomen M(Mitochondrien) möglicherweise fehlen).
Um eine Liste von Zahlen zu sortieren, würde man normalerweise verwenden sort -n:
$ sort -n -o list.sorted list
Wo listist die unsortierte Liste und list.sortedwird die resultierende sortierte Liste sein.
Mit -n, sortwird eine numerische Art an seinem Eingang durchzuführen. Da jedoch ein Teil der Eingabe nicht numerisch ist, ist das Ergebnis wahrscheinlich nicht beabsichtigt. Xund Yerscheint zuerst in der sortierten Liste, nicht zuletzt (die Geschlechtschromosomen werden normalerweise nach Chromosom 22 aufgelistet).
Wenn Sie jedoch sort -V(für "Versionssortierung") verwenden, erhalten Sie tatsächlich das, was Sie wollen:
Dies wird wahrscheinlich immer noch nicht funktionieren, wenn Sie hinzufügen, Mda dies vorher Xund nicht am Ende sortiert wird (was meiner Meinung nach normalerweise so dargestellt wird).
Oh, also ist die Liste der in der Frage dargestellten Werte eher die zu sortierende Menge als das beabsichtigte Ergebnis einer (scheinbar willkürlichen) Sortierung?
Roaima
@roaima So interpretiere ich es. Und wenn es sich um Chromosomen handelt, werden sie höchstwahrscheinlich numerisch sortiert und anschließend Xgefolgt Y.
Kusalananda
Vielen Dank. Es warf mich völlig; Ich habe nicht erwartet, dass die Liste die Rohmenge ist, sondern die sortierte Menge. Ich habe die Sprache in der Frage ein wenig angepasst, um dies zu klären.
Siehe meine Antwort, warum dies wahrscheinlich nicht das richtige Ergebnis liefert. Auch catist hier völlig unnötig.
Kusalananda
1
Wenn Sie meinen, sie sollten in der Reihenfolge 1..22, X, Y, M sortieren, können Sie diese X, Y, M vor dem Sortieren in Zahlen und nach dem Sortieren zurück übersetzen:
sed 's/X/23/;s/Y/24/;s/M/25/' < file | sort -n | sed 's/23/X/;s/24/Y/;s/25/M/'
Wenn sich diese Zahlen in einem zshArray befinden, können Sie mit diesem Hack eine beliebige Sortierreihenfolge anwenden:
k=({1..22} X Y M) v=({01..25})
typeset -A rank=(${k:^v})
unsorted=(22 Y 5 X M 13)
sorted=(/(e'{reply=($unsorted)}'oe'{REPLY=$rank[$REPLY]}'))
Antworten:
Wie @terdon bemerkte, wird dies durch die Einbeziehung von
X
undY
und die Tatsache, dass die Zahlen zwischen 1 und 22 liegen, als mögliche Liste menschlicher Chromosomen identifiziert (weshalb er sagt, dass ChromosomenM
(Mitochondrien) möglicherweise fehlen).Um eine Liste von Zahlen zu sortieren, würde man normalerweise verwenden
sort -n
:Wo
list
ist die unsortierte Liste undlist.sorted
wird die resultierende sortierte Liste sein.Mit
-n
,sort
wird eine numerische Art an seinem Eingang durchzuführen. Da jedoch ein Teil der Eingabe nicht numerisch ist, ist das Ergebnis wahrscheinlich nicht beabsichtigt.X
undY
erscheint zuerst in der sortierten Liste, nicht zuletzt (die Geschlechtschromosomen werden normalerweise nach Chromosom 22 aufgelistet).Wenn Sie jedoch
sort -V
(für "Versionssortierung") verwenden, erhalten Sie tatsächlich das, was Sie wollen:Dies wird wahrscheinlich immer noch nicht funktionieren, wenn Sie hinzufügen,
M
da dies vorherX
und nicht am Ende sortiert wird (was meiner Meinung nach normalerweise so dargestellt wird).quelle
X
gefolgtY
.Sie können verwenden
quelle
cat
ist hier völlig unnötig.Wenn Sie meinen, sie sollten in der Reihenfolge 1..22, X, Y, M sortieren, können Sie diese X, Y, M vor dem Sortieren in Zahlen und nach dem Sortieren zurück übersetzen:
Wenn sich diese Zahlen in einem
zsh
Array befinden, können Sie mit diesem Hack eine beliebige Sortierreihenfolge anwenden:quelle