Задача такая.
Есть файл текстовый с записями построчно.
Нужно организовать цикличное считывание данных построчно из этого файла для скрипта
Считывание нужной строчки получается с помощью команды sed, в формате:
sed '!1d' name-file, где 1 это номер строки.
Собственно вместо нее надо чтобы в автоматичексом режиме для этой команды в скрипте перебирались значения от 1 до 300 например.
То есть скрипт смог бы обработать все триста строк.
Просто считываемая строка подставляется уже в команду которая выполняется, для первой строки, а затем для второй и так для 3-сотой.
Shell последовательное считвыние сток из файла (для скрипта)
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 282
- ОС: OS X Yosemite and CentOS
-
- Администратор
- Сообщения: 5403
- ОС: Gentoo
Re: Shell последовательное считвыние сток из файла
while read -r
do
do_something "$REPLY"
done < "some_file"
do
do_something "$REPLY"
done < "some_file"
Спасибо сказали:
-
- Сообщения: 282
- ОС: OS X Yosemite and CentOS
Re: Shell последовательное считвыние сток из файла
чтот не совсем понятно....
Вот мой скрипт
Код: Выделить всё
#!/bin/bash
Data=`sed '1!d' /Users/test/Desktop/script_test/data1`
User=`sed '1!d' /Users/test/Desktop/script_test/users1`
echo echo $Data-----$User &&
echo succeses message send!
exit
Вместо 1-цы в команде sed нужно подставить переменную которая будет изменяться от 1 до 300
-
- Администратор
- Сообщения: 5403
- ОС: Gentoo
Re: Shell последовательное считвыние сток из файла
Arthes писал(а): ↑12.12.2009 18:09Код: Выделить всё
#!/bin/bash Data=`sed '1!d' /Users/test/Desktop/script_test/data1` User=`sed '1!d' /Users/test/Desktop/script_test/users1` echo echo $Data-----$User && echo succeses message send! exit
Вместо 1-цы в команде sed нужно подставить переменную которая будет изменяться от 1 до 300
Код: Выделить всё
while read -r Data
do
read -r -u 5 User
echo $Data-----$User
done </Users/test/Desktop/script_test/data1 5</Users/test/Desktop/script_test/users1
А ваш вариант, через sed, будет работать в _сотни_ раз медленнее.
Спасибо сказали:
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Shell последовательное считвыние сток из файла
Код: Выделить всё
#!/bin/bash
STRING=1
while [ $STRING -lt `cat /etc/passwd|wc -l` ]
do
DATA=`sed -n "$STRING"p /Users/test/Desktop/script_test/data1`
USER=`sed -n "$STRING"p /Users/test/Desktop/script_test/users1`
echo "$DATA -- $USER"
((STRING++))
done
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.
Спасибо сказали:
-
- Сообщения: 282
- ОС: OS X Yosemite and CentOS
Re: Shell последовательное считвыние сток из файла
Спасибо огромное! Работает!
К огромному сожаленью все никак не получалось всерьез заняться изучением shell... Ну делал всякие примитивные сценарии... А тут возникла необходимость...
Нашел я книгу Linux и UNIX программирование в Shell Дэвид Тейнсли... Книга хорошая. Но может еще что посоветуете?
К огромному сожаленью все никак не получалось всерьез заняться изучением shell... Ну делал всякие примитивные сценарии... А тут возникла необходимость...
Нашел я книгу Linux и UNIX программирование в Shell Дэвид Тейнсли... Книга хорошая. Но может еще что посоветуете?
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Shell последовательное считвыние сток из файла
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.
Спасибо сказали:
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Shell последовательное считвыние сток из файла
Arthes писал(а): ↑12.12.2009 11:46Собственно вместо нее надо чтобы в автоматичексом режиме для этой команды в скрипте перебирались значения от 1 до 300 например.
То есть скрипт смог бы обработать все триста строк.
Просто считываемая строка подставляется уже в команду которая выполняется, для первой строки, а затем для второй и так для 3-сотой.
/dev/random писал(а): ↑12.12.2009 18:20А ваш вариант, через sed, будет работать в _сотни_ раз медленнее.
а если подставлять прямо внутри sed, то получится ещё раз в 10-20 быстрее чем while read. Т.к. sed выполняется как раз в 10-20 раз быстрее. Однако, если читать 300 раз по 300 строк, то конечно потребуется прочитать 90000 строк, что довольно медленно, тут вы правы.