LINUX.ORG.RU

Help! Чётные слова

 , , ,


1

1

Подскажите оптимальный вариант оставить только чётные слова из строк типа:

Remove: libegl1:i386 (1.0.0-2ubuntu2.3), libegl-mesa0:i386 (19.2.8-0ubuntu0~18.04.3), libgl1:i386 (1.0.0-2ubuntu2.3), libglapi-mesa:i386 (19.2.8-0ubuntu0~18.04.3)
должно получиться
libegl1:i386 libegl-mesa0:i386 libgl1:i386 libglapi-mesa:i386
Пишу из горящего танка 8)

Ответ на: комментарий от sudoapter

Во - самое то что надо. Но странно что нет простой потоковой утилиты для вывода/удаления n-ных слов с делимитором таким-то. Надо напейсать...

superuser ★★★ ()
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от superuser

Но странно что нет простой потоковой утилиты для вывода/удаления n-ных слов с делимитором таким-то. Надо напейсать...

Ну одно дело, когда у вас есть слова с одинаковыми разделителями между всеми, другое дело как у вас: разбить на фразы с одним разделителем и выбрать слова из фраз с другим разделителем. Вторая задача — это просто обычная задача, которая есть просто два раза вызванная задача получить нужные столбцы.

vodz ★★★★★ ()
echo 'Remove: libegl1:i386 (1.0.0-2ubuntu2.3), libegl-mesa0:i386 (19.2.8-0ubuntu0~18.04.3), libgl1:i386 (1.0.0-2ubuntu2.3), libglapi-mesa:i386 (19.2.8-0ubuntu0~18.04.3)' \
    | awk -vRS=',' 'NR==1 {sub("^Remove: ","");} {print $1}'
libegl1:i386
libegl-mesa0:i386
libgl1:i386
libglapi-mesa:i386

А ещё можно и буквально «оставить только чётные»:

echo 'Remove: libegl1:i386 (1.0.0-2ubuntu2.3), libegl-mesa0:i386 (19.2.8-0ubuntu0~18.04.3), libgl1:i386 (1.0.0-2ubuntu2.3), libglapi-mesa:i386 (19.2.8-0ubuntu0~18.04.3)' \
    | awk -vRS=' ' 'NR%2==0'
legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 3)
Ответ на: комментарий от legolegs

А ещё можно и буквально «оставить только чётные»:

а наоборот - скрыть чётные, awk может?
И переносы строк не добавлять бы ещё...

superuser ★★★ ()
Последнее исправление: superuser (всего исправлений: 1)
Ответ на: комментарий от superuser

а наоборот - скрыть чётные, awk может?

конечно. условие awk NR%2==0 означает «делать действие (печать) если остаток от деления номера записи на 2 равен нулю». Заменяем 0 на 1 и будут выводиться нечётные записи.

И переносы строк не добавлять бы ещё…

Можно установить другой выходной разделитель записей, установив переменную ORS (output record separator):

awk -vRS=' ' -vORS=' ' 'NR%2==1'
legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)