To dane chcę posortować. Ale sort
traktuje liczbę jako ciąg znaków, dane nie są sortowane zgodnie z oczekiwaniami.
/ home / files / Profil 1
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
/ home / files / Profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
Chcę to uporządkować,
/ home / files / profile1
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
Czy istnieje dobry sposób na skrypt bash? Nie mogę tutaj użyć skryptu ruby lub python.
źródło
sort -V
zrobiłby.Odpowiedzi:
Aby ograniczyć liczbę, możesz użyć tymczasowego znaku wartownika:
Tutaj znakiem wartownika jest „;” - nie może być częścią nazwy pliku, który chcesz posortować - ale możesz wymienić „;” z dowolną postacią, którą lubisz. Musisz odpowiednio zmienić
sed
,sort
atr
następnie część.Potok działa w następujący sposób:
sed
polecenie wstawia wartownik przed dowolną liczbą,sort
polecenie interpretuje wartownika jako ogranicznik pola, sortuje z drugim polem jako numeryczny klucz sortowania, atr
polecenie ponownie usuwa wartownika.I
log
oznacza plik wejściowy - możesz również wprowadzić do niego dane wejściowesed
.źródło
To jest bardzo podobne do tego pytania . Problem polega na tym, że masz pole alfanumeryczne, które sortujesz, i
-n
nie traktuje tego rozsądnie, jak robi to wersja sort (-V
). Dlatego użyj:Uwaga: ta funkcja jest obecnie obsługiwana przez implementacje sortowania GNU, FreeBSD i OpenBSD.
źródło
sort -V
Nie używajsort -v
. Trudno powiedzieć na pierwszy rzut oka.Jeśli wszystkie nazwy plików mają ten sam przedrostek przed końcową częścią numeryczną, zignoruj go podczas sortowania:
(20 to pozycja pierwszej cyfry. Jest to jeden plus długość
/home/files/profile
.)Jeśli masz kilka różnych części nienumerycznych, wstaw wartownik .
źródło