скрипт на awk

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Fedor
ефрейтор
Сообщения: 67
Зарегистрирован: 2007-12-19 18:17:30
Откуда: Москва

скрипт на awk

Непрочитанное сообщение Fedor » 2008-01-27 13:40:29

Доброе время суток!
Никогда не программировал на shell. делаю скрипт, но что-то не выходит. Подскажите в чем может быть проблема.
Есть файл со списком пользователей (user)

Код: Выделить всё

admin
exim
root
написал программку на awk, файл my.awk

Код: Выделить всё

FILENAME == "user" {
name == $1
}
$1 == name {print ($1":"$2":"$3":"$4":"$5":"$6":"$7)}
Запускаю

Код: Выделить всё

awk -F: -f my.awk user /etc/passwd
Выводит только последнего пользователя из файла user, т.е.

Код: Выделить всё

root:x:0:0:root:/root:/bin/bash
Всего хорошего, Федор

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение dikens3 » 2008-01-27 19:38:56

Есть файл со списком пользователей (user)
..
написал программку на awk
..
Запускаю
..
Выводит только последнего пользователя из файла user
А что хотел получить то?

телепатирую:
1. Есть файл со списком пользователей?
2. Нужно отобразить какие-то определённые поля для пользователей (Список в п.1) из файла /etc/passwd ?
конец телепатии.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Fedor
ефрейтор
Сообщения: 67
Зарегистрирован: 2007-12-19 18:17:30
Откуда: Москва

Re: скрипт на awk

Непрочитанное сообщение Fedor » 2008-01-27 20:28:10

Хотел выбрать из passwd пользователей и все его данные, а список которых надо выбрать находится в файле user.
Всего хорошего, Федор

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение schizoid » 2008-01-28 14:36:05

а че не с помощью grep ?
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Fedor
ефрейтор
Сообщения: 67
Зарегистрирован: 2007-12-19 18:17:30
Откуда: Москва

Re: скрипт на awk

Непрочитанное сообщение Fedor » 2008-01-28 15:25:08

TO schizoid: Спасибо за подсказку. Получилось.
Всего хорошего, Федор

Гость
проходил мимо

Re: скрипт на awk

Непрочитанное сообщение Гость » 2008-01-29 12:45:50

можно и через getent(1)

Код: Выделить всё

> getent passwd root daemon
root:*:0:0:Charlie &:/root:/bin/csh
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение kmb » 2008-03-30 11:20:35

а как двойное сравнение произвести? есть файл допустим master.passwd там есть пользователи которым несколько раз меняли пароль.
Пока просто вывожу:

Код: Выделить всё

#!/bin/sh
awk ' BEGIN { FS=":" ; OFS=":" } {print $1, $2, $3} ' master.passwd
Думаю сравнивать вначале $1 с друг другом, если есть совпадение сравнить их по $3 и выводить с большим значением... :twisted:
truth is out there...

Гость
проходил мимо

Re: скрипт на awk

Непрочитанное сообщение Гость » 2008-04-03 23:23:53

kmb, может дашь примеры?
вот например, есть файл со списком пользователей:

Код: Выделить всё

root # superuser
# me
pasha
nobody
daemon
lol
Сравнить с passwd можно так:

Код: Выделить всё

$ while read line; do
	pw usershow ${line%%#*} | cut -d: -f1
done <testFile
root
nobody
daemon
$ pw usershow -a или getent passwd
<и действительно не видим пользователя `pasha' и `lol'>
или если имеем два passwd:

Код: Выделить всё

$ pw -V/path/to/another/etc usershow -a \
	| while read line; do
		pw usershow $(echo $line | cut -d: -f1)
	  done

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение kmb » 2008-04-04 7:25:19

Ты немножко не так понял, у меня один master.passwd, кстати я не думал, что если пароль меняешь, то записи в нём дублируется но с новым паролем, странно, почему просто не изменяли старую запись.
Ну я остановился на таком решение, вначале закинуть всё в скул, а дальше средствами пхп и скула получить нужный результат, пока не попробовал, но вроде проблем быть не должно...
truth is out there...

Гость
проходил мимо

Re: скрипт на awk

Непрочитанное сообщение Гость » 2008-04-04 8:20:09

kmb писал(а):Ты немножко не так понял...
<snip>
Ты немножко не так понял...
кажется, у не только у тя и не только в master.passwd что-то двоится ~_~

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение kmb » 2008-04-04 10:10:04

заставил 3 раза перечитать свой пост))) явно у тебя двоится))
У меня в мастер.пассвд не что-то двоиться, а пользователи, я не знаю как они там появились по два раза, может быть при смене пароля они добавлялись, может быть при повторном добавлении) факт в том, что там может быть:
user:pass:500
user:newpass:800
user:othernewpass:900

и пароль нужно взять с высшим ид
truth is out there...

Гость
проходил мимо

Re: скрипт на awk

Непрочитанное сообщение Гость » 2008-04-04 15:35:02

kmb писал(а):user:pass:500
user:newpass:800
user:othernewpass:900
Так по сути это *разные* пользователи. Третье поле - это uid согласно master.passwd(5). Т.е. в зависимости от пароля получаешь разный uid и все эти пароли рабочие или только один?

Ты надеюсь не вручную редактируешь master.passwd? Просто с этим файлом должны быть синхронизированы еще и spwd.db, pwd.db, passwd, group. Обычно такие утилиты как pw(8), vipw(8), chpass(1) за этим следят.

Опиши-ка процесс как ты меняешь пароли пользователям.

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение kmb » 2008-04-05 13:19:02

По сути видимо да, я вот только не понимаю как умудрились их туда с одинаковыми именами загнать. Пароль рабочий только один с высшим уидом. Я master.passwd вообще на той машине не редактировал, мне просто дали его, чтобы оттуда загнать пользователей в мускула базу.
truth is out there...

Гость
проходил мимо

Re: скрипт на awk

Непрочитанное сообщение Гость » 2008-04-05 20:24:11

kmb писал(а):Пароль рабочий только один с высшим уидом.
Ты бы полную строку дал. Например,

Код: Выделить всё

test:$1$MySalt$puQYjQjN3yqvbaOh9AinW0:1001:1001::0:0:User &:/home/test:/bin/sh
(пароль - openssl passwd -1 -salt MySalt MyPassWord) ,)

В частности интересны поля: gid (и соответствие в файле group(5)), change и expire.
Возможно разгадка где-то там.

Иначе я тоже хз. ;\
master.passwd(5) писал(а):While it is possible to have multiple entries with identical login names and/or identical user id's, it is usually a mistake to do so. Routines that manipulate these files will often return only one of the multiple entries, and that one by random selection.

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: скрипт на awk

Непрочитанное сообщение kmb » 2008-04-05 22:34:56

вот:

Код: Выделить всё

less master.passwd | grep user
user:$1$3hQTVJN2$hp.JlCvIL6.sUFZ7aaSIx/:6494:0::0:0:Last name:/home/user:/bin/sh
user:yri9s4WBGFJCk:2581:6::::user:/home/user:/bin/sh
truth is out there...