Перейти к содержанию

shell


Гость

Рекомендуемые сообщения

Народ подскажите по шелу буду очень признателен.

есть такой файл

#!/bin/sh

#d_b="228.2"; export d_b

exec db $@

Чесно скажу долго искал по нэту кроме Соловьёва статей не нашёл

скудновато...

Хотелось используя цикл брать значение из file.lst

(значения даны построчно) и запускать db в этом же цикле

каждый раз при новом значении аргумента d_b

и если возможно установить задержку

И что вообще за команда выводит определённую строку и файла ?

Ссылка на комментарий
Поделиться на другие сайты

Один из очень многих вариантов:

awk '

{

cmd=sprintf( "./db \"%s\"; sleep %d" , $0, 1 )

system( cmd )

}' file.lst

Кстати мой совет использвать awk без system,тк это очень невыгодно с точки зрения ресурсов и времени исполнения. На каждую строчку мы стартуем новый процесс Sad

Гораздо выгоднее используя awk или sed трансформировать данные в нужный формат или сгенерировать сразу шелл скрипт на основе исходного файла и запустить его потом на выполнение

Успехов

--- sas

Ссылка на комментарий
Поделиться на другие сайты

awk '

{

cmd=sprintf( "./db \"%s\"; sleep %d" , $0, 1 )

system( cmd )

}' file.lst

sprintf формирует команду

./db ваш шелл скрипт который и обрабатывает строчку

\" двойные кавычки внутри строки ограниченной двойными кавычками

%s сюда вставится содержимое $0, что означает вставить строку сюда

%d сюда вставится единичка (для команды sleep)

$0 когда awk читает файл (по умолчанию построчно) он кладет всю строку в переменную с зарезервированным именем $0

1 задержка в секундах

--- sas

Ссылка на комментарий
Поделиться на другие сайты

Предложенное решение не будет работать

без IFS="" если каждая строка состоит больше чем из одного слова

Smile

Сравните на любом файле

IFS="";for l in `cat ttt.hh`; do echo "---> $l"; done

Согласен это короче, но по гибкости awk лучше

Успехов

--- sas

Ссылка на комментарий
Поделиться на другие сайты

Кстати даже после этого прорамма пропустит све пустые строки Sad

А может быть это и нужно

Вывод: awk незаменим для процессинга файлов

Smile)

Ссылка на комментарий
Поделиться на другие сайты

А по поводу того какие значения и как они обрабатываются ничего не

сказано за исключением что они хранятся построчно Wink

Строка таблицы например это тоже строка

;O)))

Ссылка на комментарий
Поделиться на другие сайты

ясно

прошу прощения за неточность или может я не врубаюсь

но куда же девать :

d_b="228.2"; export d_b

exec db $@

именно значение d_b должно получать значения построчно из file.lst

Ссылка на комментарий
Поделиться на другие сайты

а какого формата строчки в файле с данными? надо ли обрабатывать пустые строки если они есть?

Дело в том, что решение Ananasa короче но менее универсально

А на самом деле как я сказал в первом посте решенийй может быть куча

--- sas

Ссылка на комментарий
Поделиться на другие сайты

странно , решение ананас работает

правда выполнение запроса происходит лишь 1 раз.

file.lst представляет собой значения записанные построчно

пустых строк нет и их обработка не нужна

а формат типа 123.123.123.123:8080

самое первое решение с использованием awk работает но

получаеться куча pid-ов в системе , вероятно надо ждать окончание

каждого запроса а их результат неважен

Дело в том что значения из file.lst не должны быть аргументом %s

export d_b=123.123.123.123 #

exec db $@

Ссылка на комментарий
Поделиться на другие сайты

1. По поводу решения Ananasa. В ваших условиях оно лучше. Но оно содержит ошибку (ваш код) Надо убрать exec тк он замещает текущий скрипт те до первого выполнения exec мы в скрипте Ananasa а потом в скрипте db

2. по поводу решения c awk:

должно создаваться максимум 3 процесса:

1 awk

2 sh -c "./bc ..."

3 sleep

system() ждет пока 2 и 3 процессы закончатся

Тк све приложение это цикл то пока есть строчки в file.lst 2 и 3 процессы будут заканчиваться и создаваться занова с новыми pid

Успехов

--- sas

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...