zadanie z basha

0

Korzystając z potoków utwórz polecenie, które dla każdej powłoki systemowej wyświetli liczbę użytkowników, dla których dana powłoka jest domyślną (odp. informacje można znaleźć w pliku /etc/passwd).

Lista powinna być posortowana nierosnąco.

Zapisz to polecenie w pliku defshells.sh.

Przykładowe wyjście:

 13 /bin/bash
  6 /sbin/nologin
  1 /usr/sbin/nologin

Napisałem takie polecenie cat /etc/passwd | grep bin/bash | wc -l i działa tak pół na pół..

0
  1. http://porkmail.org/era/unix/award.html#cat
  2. man cut
  3. man sort
  4. man uniq
1

Proszę:

cat /etc/passwd | sed -e 's,:, ,g' | awk '{print $1, $NF}' | sort -k 2 | awk '{if ($2!=shell) arr[$2]+=1 ; else shell=$2} END {for (i in arr) printf("%4d %s\n", arr[i], i)}'

W sumie samym AWK da się jeszcze skrócić kod, no ale nie ma potoków :)

awk 'BEGIN {FS=":"} {arr[$NF]+=1} END {for (i in arr) printf("%4d %s\n", arr[i], i)}' /etc/passwd
1

Najlepiej (jeśli mamy użyć tylko coreutils) będzie to zrobić tak:

grep -v '^#' /etc/passwd | cut -d: -f7 | sort | uniq -c | sort -nr
0

Bardzo nieedukacyjne zadanie. Rozwiązanie Pyxisa z samym AWK jest najlepsze. Ja bym oddał takie, bo skoro można bez potokow to po co się męczyć? Po to mamy w uniksie AWK żeby nie robić tylu potoków. ;) No ale w dzisiejszych czasach to już raczej niszowy język, a w sumie szkoda, bo to bardzo fajne narzędzie, bardzo przydatne i jest na praktycznie każdej maszynie z *Nixem.

0

Dzięki za pomoc, ale spiąłem tyłek i posiedziałem parę godzin co poskutkowało że zrobiłem samodzielnie jeszcze tego samego dnia :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1