Со стандартным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/ $//'
.
Вы можете просто 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
Использование 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}'