Nowe posty

Autor Wątek: Sortowanie alfabetyczne.  (Przeczytany 5834 razy)

laxsion

  • Gość
Sortowanie alfabetyczne.
« dnia: 2013-12-03, 18:31:59 »
Witam. Mam taki problem iż próbuje posortować alfabetycznie userów w katalogu
/etc/passwd i jakoś kompletnie mi nie wychodzi...

#! /bin/bash
cat /etc/passwd | sort - t - kompletnie nie działa + argumentu t nie rozpoznaje

sort -t ':' -k1,1 /etc/passwd - też nie działa + znowu t nie widzi


Prosze o pomoc :)

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Sortowanie alfabetyczne.
« Odpowiedź #1 dnia: 2013-12-03, 18:48:15 »
/etc/passwd to nie katalog

Zanim zaczniesz zgadywać polecenie, napisz
cat /etc/passwd
i zaplanuj co chcesz dokładnie zrobić i jak.

man sort

pomiędzy "-" a "t" nie powinno być spacji

parametr -t wymaga kolejnego argumentu, zobacz "man sort"

> -k1,1
chyba jednak nie chodzi ci o pierwszą kolumnę

laxsion

  • Gość
Sortowanie alfabetyczne.
« Odpowiedź #2 dnia: 2013-12-03, 19:58:19 »
Spoko
Sort -k1 /etc/passwd posortowało to idealnie...
Teraz myślę jak zrobić selekcje by zostały te zaczynające się od S.
Jakaś wskazówka ?


grep -i "^S" /etc/passwd  zadziałało :)

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Sortowanie alfabetyczne.
« Odpowiedź #3 dnia: 2013-12-03, 22:10:20 »
sort -k1 nie ma za bardzo sensu, w szczególności przy pliku passwd bez podania opcji -t.
-k1 oznacza sortowanie po pierwszej kolumnie.
A domyślnym separatorem kolumn (zmienianym przez -t) są puste znaki, które jednak nie są poprawnym separatorem dla pliku passwd.
Równie dobrze możesz użyć samego sort, bo login i tak jest w pierwszej kolumnie.

Myślałem, że chodzi ci o posortowanie po nazwach użytkowników, a nie loginach, wtedy opcja -k byłaby dużo bardziej użyteczna.

Co do grepa, zadziałało bo znów login jest na początku. Taka składnia nic by nie dała, gdybyś miał szukać po pełnych nazwach użytkowników, które są w 5-tej kolumnie. Przykład na znalezienie użytkowników, których pełne nazwy zaczynają się na "M":
awk '$5~/^M/' FS=':' /etc/passwd