2016-02-10 5 views
1

мне нужно подсчитать учетные записи пользователей, группы пользователей и недостающую информацию из/и т.д./пароля и выводить их с принтомИз файла подсчет количества вхождений с Grep очистного на персонаже

PASSWD файл в примере:

root:x:0:0:root:/root:/bin/bash 

dnsmasq:x:106:65534:dnsmasq,,,:/var/lib/misc:/bin/false 

libuuid:x:100:101::/var/lib/libuuid: 

Разделительные ряды на ":" мне нужно грести 1,3 и 5

искали и не могу найти aswer, пожалуйста, помогите

ответ

0

I предположим, что вам уже удалось прочитать файл passwd по строкам. Когда у вас есть строка, загруженная в var (например, $line), вы можете использовать split.

my ($user, $gid, $info) = (split /:/, $line)[0, 3, 4]; 

Элементы нулевой индексируются, так что первая «колонна» 0.

EDIT

Я не знаю, как вы определить, если информация о пользователе «отсутствует» поэтому я оставил это, но вы можете использовать те же методы, которые я использовал для учетных записей или групп в зависимости от ваших потребностей. Когда вы подсчитываете группы, вы хотите избежать подсчета повторяющихся групп. Для этого я добавляю gid как хэш-ключ. Если мы позже столкнемся с одной и той же группой, ключ уже существует, и мы ничего не увеличиваем. Позже мы просто посчитаем ключи.

Также исправление ... groupid - это фактически столбец 4 (split 3). Столбец 3 (split 2) - это идентификатор пользователя, и будет столько же, сколько есть учетных записей.

use strict; 
use warnings; 

open my $content, '<', '/etc/passwd' 
    or die "Could not open: $!"; 

my $accounts; 
my %groups; 

while(my $line = <$content>) { 
    # Increment user count 
    $accounts++; 

    # Get group add it to hash to avoid duplicates 
    my ($gid) = (split /:/, $line)[3]; 
    $groups{$gid} = 1; 
} 
close $content; 

printf("Number of accounts: %d\n", $accounts); 
printf("Number of groups: %d\n", scalar keys %groups); 
+0

Это помогает много, но проблема все еще граф, то Ouput должно быть что-то вроде 'Количество счетов: 22',' Количество групп: 12', 'Отсутствует информация: 2' – V3NG3FuL

+0

Вы должны размещать кода, который у вас есть, поэтому люди могут точно видеть, как/где вы застреваете. – Joshua

+0

Спасибо, много, что решил мою проблему. Отсюда легче определить недостающую информацию. благодаря – V3NG3FuL

Смежные вопросы