Подскажите как написать скрипт на 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 сделать такую сортировку ?
Благодарю за помощь.
>(извлеч из строчек первое поле - отделенное ":x")
Первое поле, или первое, после которого x?
Если первое, то:
bash$ cat /etc/passwd | awk -F: '{print $1}'>как в bash сделать такую сортировку ?
Обработку? Если сортировку, то sort, если уникальность, то uniq.
>>(извлеч из строчек первое поле - отделенное ":x")
>Первое поле, или первое, после которого x?
>Если первое, то:
>bash$ cat /etc/passwd | awk -F: '{print $1}'
>
>>как в bash сделать такую сортировку ?
>Обработку? Если сортировку, то sort, если уникальность, то uniq.Все неправильно :)
cat /etc/passwd |sed "s/:/ /"|awk '{print $1}'
А какая уникальность в passwd для логинов ??
>>bash$ cat /etc/passwd | awk -F: '{print $1}'
>Все неправильно :)
Проглядели опцию -F: (тогда двоеточие будет разделителем).
Я, естественно, тестировал (в Red Hat Linux).>cat /etc/passwd |sed "s/:/ /"|awk '{print $1}'
Вы заменили двоеточия пробелами и поэтому не нужно использовать -F
>
>?????????? ??? ???????? ?????? ?? 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.
>Есть файл /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
cut -f1 -d: /etc/passwd