Есть список пользователей в таком виде:
"Ivan B","iv","Petr Os","Oms","Soa OS","sso"
Хочу выбрать их ники, а это: iv, Oms, sso, т.е. получается через одно слово в строке, с разделителем ","
Ранее с подобным не сталкивался, подскажите, пожалуйста, в какую сторону смотреть.
Выбрать через одно слово из строки
Модераторы: /dev/random, Модераторы разделов
-
Gineaser
- Сообщения: 157
- Статус: Evrashka
- ОС: Arch Linux
Re: Выбрать через одно слово из строки
Я бы это на питоне сделал, а не на баше
Обезьянка видит - Обезьянка делает...
-
Brainsburn
- Сообщения: 950
- Статус: /
- ОС: Gentoo
Re: Выбрать через одно слово из строки
А я бы на Ямайку слетал...
Код: Выделить всё
cat file.txt | sed 's/,/\n/g' | awk 'NR%2 != 1'т.е. сначала запятые заменяем на переносы строки, а потом авком показываем каждую вторую строку. Кавычки можно удалить отдельно: 's/\"//g'
Спасибо сказали:
-
Gineaser
- Сообщения: 157
- Статус: Evrashka
- ОС: Arch Linux
Re: Выбрать через одно слово из строки
Потом это надо слепить вкучу разделяя запятыми.
Не проще написать две строчки на питоне? Не понятен Ваш сарказм? Мой вопрос был на уточнение имеено на баше требуется решить задачу, ли нужен конечный результат.
Не проще написать две строчки на питоне? Не понятен Ваш сарказм? Мой вопрос был на уточнение имеено на баше требуется решить задачу, ли нужен конечный результат.
Обезьянка видит - Обезьянка делает...
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Выбрать через одно слово из строки
$ echo '"Ivan B","iv","Petr Os","Oms","Soa OS","sso"' | sed -r 's/"\w+ \w+"//g;s/,,/,/g;s/^,//;s/,$//'
"iv","Oms","sso"
"iv","Oms","sso"
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Выбрать через одно слово из строки
Во-первых, можно сделать гораздо короче и без всяких -r:
Код: Выделить всё
echo '"Ivan B","iv","Petr Os","Oms","Soa OS","sso"' | sed 's/"[^"]* [^"]*",//g'А во-вторых, если имя будет без пробела или ник с пробелом, то не сработает.
Чтобы пофиксить эту досадную багу я бы сделал так:
Код: Выделить всё
echo '"Ivan B","iv","Petr Os","Oms","Soa OS","sso"' | sed 's/^/@/;:b;s/@[^,]*,\([^,]*,*\)/\1@/;tb;s/@$//'Можно и без седа, одним awk'ом обойтись:
Код: Выделить всё
echo '"Ivan B","iv","Petr Os","Oms","Soa OS","sso"' | awk -F, '{for(i=2;i<=NF;i+=2){print $i}}'UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
FatZer
- Сообщения: 33
- ОС: Gentoo
Re: Выбрать через одно слово из строки
с sed'ом чего-то намудрили... одним s'ом же можно обойтись:
Код: Выделить всё
echo '"IvanB","iv","Petr Os","Oms","Soa OS","sso"' | sed -r 's/[^,]*,([^,]*(,|$))/\1/g'-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Выбрать через одно слово из строки
SLEDopit
прошу прощения, я неправильно истолковал условия задачи·
и моё решение, и ваше (основанное на этой моей невнимательности), неверны·
верное решение привёл FatZer
прошу прощения, я неправильно истолковал условия задачи·
и моё решение, и ваше (основанное на этой моей невнимательности), неверны·
верное решение привёл FatZer
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог