powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Как сделать замену имени?
5 сообщений из 5, страница 1 из 1
Как сделать замену имени?
    #37103314
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня!

Имеется файл такого вида
Код: plaintext
1.
2.
3.
4.
        2316M   untosh
        5989M    1055 
        3528M   anton
        3373M   lisa
Собственно, это обработанный вывод команды repquota. Некоторые юзеры были удалены из системы - у них светится UID.
Хочется вместо логина в правой части видеть понятное имя пользователя - пятое поле из /etc/passwd. Если справа UID - его оставить как есть. Конечно, есть вариант прочитать /etc/passwd перлом, загнать данные в хеш, затем сделать подстановку... Но, может быть, есть какой то более простой способ?
ОС FreeBSD, если это имеет значение.
...
Рейтинг: 0 / 0
Как сделать замену имени?
    #37104531
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

можно немного поизвращаться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
cat $fileName | awk 'BEGIN {
	filter=" | sed ''\"s/\\([[:alnum:]]*:\\)\\{4\\}//; s/:[[:print:]]*//''\""
} 
{
	if (match($2, "[[:alpha:]]+"))
	{
		system("echo "$1" $(grep " $2 " /etc/passwd" filter")");
	}
	else
	{
		system("echo " $1 " " $2)
	}
}'
Но я не уверен, что это проще или короче перловки.
...
Рейтинг: 0 / 0
Как сделать замену имени?
    #37104771
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

мда, оказывается, можно и шеллом обойтись:
Код: plaintext
cat $fileName | while read size name; do if [[ $name =~ [[:alpha:]]+ ]]; then name=$(grep "$name" /etc/passwd | cut -d: -f5); fi; echo $size $name; done
...
Рейтинг: 0 / 0
Как сделать замену имени?
    #37104822
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok,

Премного благодарен! И впрямь, проще, чем на перле. /etc/passwd читается всякий раз на новой строчке, да из-за редкого использования это не критично.
Единственное, что подправил - добавил двоеточие после $name
Код: plaintext
grep "$name" /etc/passwd
А иначе кое-где проскакивали по нескольку имен, например, в случае юзеров anton и antonov
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как сделать замену имени?
    #37105052
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

Так правильнее ))
Код: plaintext
grep "^$name:"

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Как сделать замену имени?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]