[Решено] Чтение строк с пробелами (" ") из файла

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

[Решено] Чтение строк с пробелами (" ") из файла

Сообщение yamah »

Доброе время суток!

Столкнулся с проблемой.

Есть файл с таким содержанием

Код: Выделить всё

cat file.txt
             ';clodxxxkkkkkkkkxxxxdddoooooll.
            ';cloddxxkkkkkkkkkxxxxdddoooollc'

(В начале и конце куча пробелов)/

Конструккция

Код: Выделить всё

cat file.txt | while read SMT
   do
        echo $SMT
done

выводит уже без пробелов в начале и конце строки

Код: Выделить всё

';clodxxxkkkkkkkkxxxxdddoooooll.
';cloddxxkkkkkkkkkxxxxdddoooollc'


Как это побороть?
Мне в SSMT нужна вся строка целиком.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo

Re: [Решено] Чтение строк с пробелами (" ") из файла

Сообщение /dev/random »

В bash (но не в POSIX) read без указания переменной прочитает всю строку, включая пробелы, в переменную $REPLY
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Чтение строк с пробелами (" ") из файла

Сообщение drBatty »

yamah писал(а):
01.11.2013 20:44
Конструккция

фтопку.
read(1) тут вообще не годится, разве что IFS менять.

$

$ IFS="\n"; while read L; do echo "'$L'"; done < ttt ' z z ' ' z z z' 'zz '



зачем вам эта ерунда понадобилась? Расскажите?Какой резон пихать файл в переменную построчно?

yamah писал(а):
01.11.2013 20:44
Мне в SSMT нужна вся строка целиком.

тащем-то можно закинуть весь файл

Код: Выделить всё

F=$(cat tttt)

или нужную строчку

Код: Выделить всё

F=$(sed '1!d' tttt)

(строка №1)

последний вариант годен потому, что даёт ещё возможности для фильтрации
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: [Решено] Чтение строк с пробелами (" ") из файла

Сообщение yamah »

drBatty писал(а):
01.11.2013 21:01
зачем вам эта ерунда понадобилась? Расскажите?Какой резачем вам эта ерунда понадобилась? Расскажите?Какой резон пихать файл в переменную построчно?зон пихать файл в переменную построчно?

Это нужно для имитации посимольного вывода текста.

Код: Выделить всё

cat file.txt | while read
    do
        i=0
        while [ "$i" -lt "${#REPLY}" ]
            do
                echo -n ${REPLY:$i:1}
                i=$[$i+1]
                sleep 0.01
            done
        echo ""
    done

(Один фиг echo -n игнорирует пробел.)
Не факт (причем совсем не факт), что выводится так будет готовый файл, а не результат работы другой программы.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [Решено] Чтение строк с пробелами (" ") из файла

Сообщение SLEDopit »

yamah писал(а):
01.11.2013 22:30
Это нужно для имитации посимольного вывода текста.
Уже всё придумали до нас.

Код: Выделить всё

randtype -m 0 file.txt # 0 - количество исправлений, которое можно сэмулирвать во время "печати" файла

или

Код: Выделить всё

pv -qL 10 file.txt # 10 == количество секунд, за которое весь файл будет выведен на экран

вот только pv и randtype нужно дополнительно устанавливать. в debian они находятся в пакетах pv и randtype соотвественно.
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.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Чтение строк с пробелами (" ") из файла

Сообщение drBatty »

yamah писал(а):
01.11.2013 22:30
Один фиг echo -n игнорирует пробел.

при чём тут echo? Кавычки поставьте. "двойные". echo -n "${REPLY:$i:1}"

пробелы bash отрезает, когда парсит параметры команды echo.
yamah писал(а):
01.11.2013 22:30
Не факт (причем совсем не факт), что выводится так будет готовый файл, а не результат работы другой программы.

конвейер это всегда плохо.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: [Решено] Чтение строк с пробелами (" ") из файла

Сообщение yamah »

SLEDopit писал(а):
01.11.2013 23:06
yamah писал(а):
01.11.2013 22:30
Это нужно для имитации посимольного вывода текста.
Уже всё придумали до нас.

Код: Выделить всё

randtype -m 0 file.txt # 0 - количество исправлений, которое можно сэмулирвать во время "печати" файла

или

Код: Выделить всё

pv -qL 10 file.txt # 10 == количество секунд, за которое весь файл будет выведен на экран

вот только pv и randtype нужно дополнительно устанавливать. в debian они находятся в пакетах pv и randtype соотвественно.

Спасибо, буду знать!

drBatty писал(а):
01.11.2013 23:07
при чём тут echo? Кавычки поставьте. "двойные". echo -n "${REPLY:$i:1}"

пробелы bash отрезает, когда парсит параметры команды echo.

Во, блин, На самом элементарном ступил! :blush:

drBatty писал(а):
01.11.2013 23:07
конвейер это всегда плохо.

Толко во многих случаях, иного варианта нет.
(Тот же пример с передачей файлов по сети через тарбол со сжатием).
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали: