Shell последовательное считвыние сток из файла (для скрипта)

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

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

Arthes
Сообщения: 282
ОС: OS X Yosemite and CentOS

Shell последовательное считвыние сток из файла

Сообщение Arthes »

Задача такая.
Есть файл текстовый с записями построчно.
Нужно организовать цикличное считывание данных построчно из этого файла для скрипта

Считывание нужной строчки получается с помощью команды sed, в формате:
sed '!1d' name-file, где 1 это номер строки.

Собственно вместо нее надо чтобы в автоматичексом режиме для этой команды в скрипте перебирались значения от 1 до 300 например.
То есть скрипт смог бы обработать все триста строк.

Просто считываемая строка подставляется уже в команду которая выполняется, для первой строки, а затем для второй и так для 3-сотой.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Shell последовательное считвыние сток из файла

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

while read -r
do
do_something "$REPLY"
done < "some_file"
Спасибо сказали:
Arthes
Сообщения: 282
ОС: OS X Yosemite and CentOS

Re: Shell последовательное считвыние сток из файла

Сообщение Arthes »

/dev/random писал(а):
12.12.2009 11:48
while read -r
do
do_something "$REPLY"
done < "some_file"


чтот не совсем понятно....

Вот мой скрипт

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

#!/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
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Shell последовательное считвыние сток из файла

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

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, будет работать в _сотни_ раз медленнее.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Shell последовательное считвыние сток из файла

Сообщение SLEDopit »

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

#!/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.
Спасибо сказали:
Arthes
Сообщения: 282
ОС: OS X Yosemite and CentOS

Re: Shell последовательное считвыние сток из файла

Сообщение Arthes »

Спасибо огромное! Работает!
К огромному сожаленью все никак не получалось всерьез заняться изучением shell... Ну делал всякие примитивные сценарии... А тут возникла необходимость...

Нашел я книгу Linux и UNIX программирование в Shell Дэвид Тейнсли... Книга хорошая. Но может еще что посоветуете?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Shell последовательное считвыние сток из файла

Сообщение SLEDopit »

Arthes писал(а):
12.12.2009 19:54
Но может еще что посоветуете?
http://tldp.org/LDP/abs/html/
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: Shell последовательное считвыние сток из файла

Сообщение drBatty »

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 строк, что довольно медленно, тут вы правы.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: