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

Исходное сообщение
"Использование перенаправлений и конвейера (программного канала)"

Отправлено iop , 30-Окт-17 15:24 
Помогите пожалуйста с заданием,хотя бы начать.
В созданном текстовом файле оставить в каждой строке не более 2-х слов. Остаток перенести в следующую строку. Если вторая строка в паре оказывается пустой - печатать в ней символ '='.
Нужно ли здесь использовать cut и как это сделать?

Содержание

Сообщения в этом обсуждении
"Использование перенаправлений и конвейера (программного канала)"
Отправлено ACCA , 31-Окт-17 20:02 
> Нужно ли здесь использовать cut и как это сделать?

Не нужно, чисто башем:

while read -a R ; do
    while [ ${#R[@]} -ge 1 ] ; do
        if [ ${#R[@]} -gt 2 ] ; then
            echo ${R[0]} ${R[1]}
            R=( ${R[@]:2} )
        else
            echo ${R[@]}
            echo =
            R=()
        fi
    done
done


"Использование перенаправлений и конвейера (программного канала)"
Отправлено iop , 05-Ноя-17 14:10 
Спасибо за помощь) Но можно ли написать что-нибудь с использованием cut, sed,paste, tail, sort. На подобие такого примерчика:
pr -T 123.txt |  Выводим файл без заголовка и лишних строк.
head -n3 |       Выводим первые 3 строки.
tail -1 > temp1  Выводим последнюю из первых трех строк и сохраняем результат в файл temp1.
pr -T 123.txt |  Выводим файл без заголовка и лишних строк.
sed 3d >temp2    Удаляем 3 строку и сохраняем результат в файл temp2.
paste -s -d"\n" temp2 temp1 > new123.txt  Склеиваем 2 файла соблюдая символы из списка.
rm -f temp*                               Удаляем временные файлы.

Не могу разобраться как это использовать на свой пример,помогите,буду очень благодарна))


"Использование перенаправлений и конвейера (программного канала)"
Отправлено ACCA , 06-Ноя-17 06:30 
Напиши по порядку. Что на входе, что ты хочешь получить на выходе.

"Использование перенаправлений и конвейера (программного канала)"
Отправлено iop , 06-Ноя-17 14:58 
> Напиши по порядку. Что на входе, что ты хочешь получить на выходе.

Ну если я правильно поняла,то у нас есть файл с любым текстом,например:

Вы помните,
Вы всё, конечно, помните,
Как я стоял,
Приблизившись к стене,
Взволнованно ходили вы по комнате
И что-то резкое
В лицо бросали мне.
Вы говорили:
Нам пора расстаться,
Что вас измучила
Моя шальная жизнь,
Что вам пора за дело приниматься,
А мой удел -
Катиться дальше, вниз.

После преобразований(В созданном текстовом файле оставить в каждой строке не более 2-х слов. Остаток перенести в следующую строку. Если вторая строка в паре оказывается пустой - печатать в ней символ '='.)должно получиться:

Вы помните,
=
Вы всё,
конечно, помните,
Как я
стоял,
Приблизившись к
стене,
Взволнованно ходили
вы по комнате
И что-то
резкое
В лицо
бросали мне.
Вы говорили:
Нам пора
расстаться,
Что вас
измучила
Моя шальная
жизнь,
Что вам
пора за дело приниматься,
А мой
удел -
Катиться дальше,
вниз.


"Использование перенаправлений и конвейера (программного канала)"
Отправлено ACCA , 07-Ноя-17 06:34 
Какой-то подозрительный пример.

Строки "вы по комнате" и "пора за дело приниматься," нарушают условие "оставить в каждой строке не более 2-х слов"

Если же "остаток" - это не "каждая строка", то решение сильно проще:

cat text.txt | while read w1 w2 rest ; do
  echo $w1 $w2
  if [ -z "$rest" ] ; then
    echo =
  else
    echo $rest
  fi
do