Отображение количества зарегистрированных пользователей

Со стандартнымawk:

{ printf("%s\t", $1) }
{
    linelen = 8;  # assume 8 spaces for the first field

    for (i = 2; i <= NF; ++i) {
        wordlen = length($i);

        if (wordlen + linelen > 65) {
            # break output line since adding next word
            # would make it too long
            printf("\n\t");
            linelen = 8; # count tab as 8 spaces
        }

        if (i < NF) {
            printf("%s ", $i);
            linelen += wordlen + 1; # +1 for the space
        } else {
            printf("%s\n", $i);
        }
    }
}

Тестирование:

$ awk -f script.awk file.in
Depth   Description
(ft)    -
12370.0 LS: Mdst, blsh gry, sft, occ mod firm, crpxln, prly, arg,
        SLTST: blk, firm-mod hd, amor, gt, mod calc, CLST: lt
        gry-m gry, sft, amor, wxy
12400.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST:
        blk-dk gry, firm-mod hd, amor, gt, mod calc, CLST: lt
        gry-m gry, occ rdsh gry, mod firm, amor, wxy, tr CHK
12430.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST:
        blk-dk gry, firm-mod hd, amor, gt, mod calc, SH: blk-dk
        gry, mod firm, blky-plty, occ brit, wxy
12460.0 SH: blk-dk gry, mod firm, blky-plty, occ brit, ea, SLTST:
        blk-dk gry, firm-mod hd, amor, gt, mod calc, SST: gry-dk
        gry, wl consol, v f, ang, p srt, cotd, slily calc cmt, no
        fluor

Единственным недостатком является то, что в большинстве строк вывода остаются пробелы в конце. Вы можете удалить их, передав вывод через sed 's/ $//'.

1
11.01.2020, 00:18
2 ответа

Вы можете просто grepфайл /etc/passwordдля строк, которые имеют :/home(, то есть поле, начинающееся с /home), затем больше не-:символов и только еще один :перед концом, который следует/bin/bash:

$ grep ':/home/[^:]*:/bin/bash' /etc/passwd
terdon:x:1000:1000::/home/terdon:/bin/bash
bib:x:1001:1001::/home/bib:/bin/bash

Итак, для отображения только числа:

$ grep -c ':/home/[^:]*:/bin/bash' /etc/passwd
2
2
27.01.2020, 23:15

Использование getentиawk:

getent passwd | awk -F: '$6 ~ "^/home/" && $7 ~ "bash$"{print $1}'

Это будет искать всех пользователей с /home/в качестве пути в их домашнем каталоге и их оболочке, установленной на bash, и распечатывать список имен пользователей.

Если вы хотите, чтобы возвращалось просто количество пользователей, вы можете изменить программу awkна:

getent passwd | awk -F: '$6 ~ "^/home/" && $7 ~ "bash$"{c+=1}END{print c}'
3
27.01.2020, 23:15

Теги

Похожие вопросы