На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Сообщение
yamah » 01.11.2013 20:44
Доброе время суток!
Столкнулся с проблемой.
Есть файл с таким содержанием
Код: Выделить всё
cat file.txt
';clodxxxkkkkkkkkxxxxdddoooooll.
';cloddxxkkkkkkkkkxxxxdddoooollc'
(В начале и конце куча пробелов)/
Конструккция
Код: Выделить всё
cat file.txt | while read SMT
do
echo $SMT
done
выводит уже без пробелов в начале и конце строки
Код: Выделить всё
';clodxxxkkkkkkkkxxxxdddoooooll.
';cloddxxkkkkkkkkkxxxxdddoooollc'
Как это побороть?
Мне в SSMT нужна вся строка целиком.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
/dev/random
Администратор
Сообщения: 5427
ОС: Gentoo
Сообщение
/dev/random » 01.11.2013 20:51
В bash (но не в POSIX) read без указания переменной прочитает всю строку, включая пробелы, в переменную $REPLY
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 01.11.2013 21:01
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 нужна вся строка целиком.
тащем-то можно закинуть весь файл
или нужную строчку
(строка №1)
последний вариант годен потому, что даёт ещё возможности для фильтрации
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Сообщение
yamah » 01.11.2013 22:30
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
Сообщение
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 соотвественно.
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
Сообщение
drBatty » 01.11.2013 23:07
yamah писал(а): ↑ 01.11.2013 22:30
Один фиг echo -n игнорирует пробел.
при чём тут echo? Кавычки поставьте. "двойные". echo -n "${REPLY:$i:1}"
пробелы bash отрезает, когда парсит параметры команды echo.
yamah писал(а): ↑ 01.11.2013 22:30
Не факт (причем совсем не факт), что выводится так будет готовый файл, а не результат работы другой программы.
конвейер это всегда плохо.
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Сообщение
yamah » 02.11.2013 18:07
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.
Во, блин, На самом элементарном ступил!
drBatty писал(а): ↑ 01.11.2013 23:07
конвейер это всегда плохо.
Толко во многих случаях, иного варианта нет.
(Тот же пример с передачей файлов по сети через тарбол со сжатием).
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...