URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1495
[ Назад ]

Исходное сообщение
"помогите с bash скриптом"

Отправлено gexa , 19-Мрт-03 10:55 

Подскажите как написать скрипт на bash.
Есть файл /etc/passwd к примеру:

xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
ihor:x:42:42::/dev/null:/sbin/nologin
rpcuser:x:30:30:RPC Service User:
...

нужно по запуску скрипта получить stdout вида:
xfs
ihor
rpcuser
...
(извлеч из строчек первое поле - отделенное ":x")

как в bash сделать такую сортировку ?
Благодарю за помощь.


Содержание

Сообщения в этом обсуждении
"помогите с bash скриптом"
Отправлено SergeiZz , 19-Мрт-03 13:50 
>(извлеч из строчек первое поле - отделенное ":x")
Первое поле, или первое, после которого x?
Если первое, то:
bash$ cat /etc/passwd | awk -F: '{print $1}'

>как в bash сделать такую сортировку ?
Обработку? Если сортировку, то sort, если уникальность, то uniq.


"помогите с bash скриптом"
Отправлено Nikolaev D. , 19-Мрт-03 14:22 
>>(извлеч из строчек первое поле - отделенное ":x")
>Первое поле, или первое, после которого x?
>Если первое, то:
>bash$ cat /etc/passwd | awk -F: '{print $1}'
>
>>как в bash сделать такую сортировку ?
>Обработку? Если сортировку, то sort, если уникальность, то uniq.

Все неправильно :)

cat /etc/passwd |sed "s/:/ /"|awk '{print $1}'
А какая уникальность в passwd для логинов ??


"помогите с bash скриптом"
Отправлено SergeiZz , 19-Мрт-03 19:26 
>>bash$ cat /etc/passwd | awk -F: '{print $1}'
>Все неправильно :)
Проглядели опцию -F: (тогда двоеточие будет разделителем).
Я, естественно, тестировал (в Red Hat Linux).

>cat /etc/passwd |sed "s/:/ /"|awk '{print $1}'
Вы заменили двоеточия пробелами и поэтому не нужно использовать -F


"???????? ? bash ????????"
Отправлено sas , 20-Мрт-03 00:25 
>
>?????????? ??? ???????? ?????? ?? bash.
>???? ???? /etc/passwd ? ???????:
>
>xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
>ihor:x:42:42::/dev/null:/sbin/nologin
>rpcuser:x:30:30:RPC Service User:
>...
>
>????? ?? ??????? ??????? ???????? stdout ????:
>xfs
>ihor
>rpcuser
>...
>(?????? ?? ??????? ?????? ???? - ?????????? ":x")
>
>??? ? bash ??????? ????? ?????????? ?
>????????? ?? ??????.

"?????" ????????? ???????:

VVV="111:222:333:444:555:666"
pattern=':*'
echo ${VVV%%${pattern}}

??? ??? ?????:

pattern=':*'
IFS=$'\n'
for l in `cat /etc/passwd`; do echo "${l%%$pattern}"; done

????? ???? ??? ????????????? ?????? cat  ? ?????? ?????????? awk

awk -F: '{ print $1 }' /etc/passwd

??????? awk ??????? ????? ?????? ? ?????? ? ?????? ??????? ??????????? ?????????? ???? ???????? ? ????????? ??????? ???????

:))

???????
--- sas


"без вопросов :)"
Отправлено sas , 20-Мрт-03 00:28 
>
>Подскажите как написать скрипт на bash.
>Есть файл /etc/passwd к примеру:
>
>xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
>ihor:x:42:42::/dev/null:/sbin/nologin
>rpcuser:x:30:30:RPC Service User:
>...
>
>нужно по запуску скрипта получить stdout вида:
>xfs
>ihor
>rpcuser
>...
>(извлеч из строчек первое поле - отделенное ":x")
>
>как в bash сделать такую сортировку ?
>Благодарю за помощь.

"ЧистА" башевский вариант:

VVV="111:222:333:444:555:666"
pattern=':*'
echo ${VVV%%${pattern}}

или для файла:

pattern=':*'
IFS=$'\n'
for l in `cat /etc/passwd`; do echo "${l%%$pattern}"; done

Кроме того нет необходимости делать cat  в случае применения awk

awk -F: '{ print $1 }' /etc/passwd

Конечно awk решение более мощное и гибкое С другой стороны подстановка параметров тоже работает в некоторых простых случаях

:))

Успехов
--- sas


"помогите с bash скриптом"
Отправлено dvic , 23-Мрт-03 04:39 
cut -f1 -d: /etc/passwd