Mam plik oddzielony przecinkami, który wygląda następująco:
100,00869184
6492,8361
1234,31
200,04071
Chcę użyć, sort
aby posortować ten plik numerycznie tylko według pierwszej kolumny .
Pożądany rezultat:
100,00869184
200,04071
1234,31
6492,8361
Jak to osiągnąć za pomocą sortowania? Wygląda na to, że przecinki są traktowane jak separatory tysięcy zamiast separatorów, nawet jeśli nazywam je jako takie.
Zarówno sort -t',' -n
i sort -t',' -nk1'
daj mi to:
1234,31
200,04071
6492,8361
100,00869184
Sortowanie według wartości domyślnych (brak parametrów) lub użycie sort -t','
daje mi to:
100,00869184
1234,31
200,04071
6492,8361
Sortowanie według liczby sort -n
daje mi to:
1234,31
200,04071
6492,8361
100,00869184
Jak mogę użyć sortowania, aby osiągnąć pożądany rezultat?
Edytowano, aby dodać: Jest to jednorazowa operacja, aby utworzyć posortowaną listę około 7 milionów linii, więc obejścia lub inne niekonwencjonalne metody są całkowicie dopuszczalne.
-t
opcję spacji między-t
postacią a postaciąOdpowiedzi:
Jest to z pewnością nieprzyzwoite obejście, ale wymyśliłem sposób na zrobienie tego dzięki poradom @ slhck na temat lokalizacji. Jeśli pojawi się lepsza odpowiedź, która byłaby bardziej pomocna dla innych, na pewno ją zaakceptuję, ponieważ w zasadzie działa to tylko na mój konkretny problem.
Ustawiłem ustawienia regionalne na hiszpańskie (boliwijskie), aby przecinki były traktowane jak kropki dziesiętne, a następnie standardowe sortowanie numeryczne załatwiło sprawę.
źródło
GNU
sort
robi to domyślnie:Wersja:
Jest jednak jedno zastrzeżenie: jeśli sortowanie nie działa zgodnie z oczekiwaniami,
locale
prawdopodobnie ustawiono coś innego niżC
. Dlaczego to?locale
definiuje sortowanie i interpretację liter, cyfr, znaków dziesiętnych i tak dalej.Aby to sprawdzić, wystarczy wpisać
locale
w terminalu. Być może jestLC_NUMERIC
ustawionyen_US.UTF-8
? To by wyjaśniało niewłaściwy porządek sortowania. Ustaw z powrotem naC
:Następnie spróbuj
sort
ponownie wykonać polecenie. Jeśli chcesz ustawić swój globalnylocale
naC
, zrób to za pomocą:źródło
locale
problem. Ale cosort --version
właściwie jest dla ciebie?--
polecenia też dla mnie nie działały. Sprawdziłem stronę podręcznika i nie ma żadnej jawnie wywołanej wersji, ale zawiera „HP-UX 11i wersja 2: sierpień 2003”, jeśli to w ogóle pomaga. Mój LC_NUMERIC jest ustawiony na „C”.,
jako separator dziesiętny. Jednak nigdy nie korzystałem z HP-UX.Spróbuj dodać
-g
opcję, która ma służyć do sortowania numerycznego.Próbować:
źródło
-n
sortowanie numeryczne nie jest ? -g daje mi nielegalną opcję.-g
jestgeneral-numeric-sort
opcją i powinna być dostępna w każdej najnowszej wersjisort
. @dpatcheryWymień ogranicznik:
- powinien ci pomóc.
źródło