2012-01-04 5 views
1

У меня есть файл с содержимым:Условия использования

$> cat file 
1 
2 
4 

Теперь я хотел бы использовать/запустить другой сценарий, если разница между числами (вычитание) больше, чем 1, в противном случае выход из основной скрипт.

Я попытался сделать это следующим образом, но не работает:

less file \ 
| awk '\ 
    function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}\ 
    BEGIN{i=1;}\ 
    {new=old;old=$1}\ 
    {if(abs($1-new)>1)i++;} 
    END{if(i>1) print 1; else print 0;}' \ 
| while read i;do 
if ((${i}));then 
echo -n "Would you like to continue? [yes or no]: " 
read yno 
    case ${yno} in 
     y) 
      echo Continuing... 
      ;; 
     n) 
      echo Exiting... 
      ;; 
     *) 
      echo "Invalid input" 
      ;; 
    esac 
else echo Cont... 
fi 
done 

Я хотел бы ожидать, что если $ {я} == 1, то я могу принять решение, хочу ли я продолжать или нет.

+0

Рад помочь вам решить вашу проблему, если эти решения не помогают, если вы можете уточнить ваши намерения, побуждая «вы бы ...». Почему вы не можете сделать вычитание и разрешить коды выхода, чтобы определить, что происходит вне awk. Вы говорите «но не работает», пожалуйста, отредактируйте свой вопрос, чтобы показать, какие сообщения об ошибках вы получите, или укажите, почему вы говорите, что он не работает. Похоже, он должен работать. Удачи. – shellter

ответ

1

Вы писали

Я хотел бы ожидать, что если $ {я} == 1,

Да, но что, если $ {я} = "Ошибка на входе" или какой-либо другой значение, ваше заявление должно явно указать ваше состояние. Кроме того, используя меньше, чтобы отправить файл в трубе не стандартная ситуация, почему бы не просто передать имя файла в AWK для обработки, т.е.

awk '\ 
    function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}\ 
    BEGIN{i=1;}\ 
    {new=old;old=$1}\ 
    {if(abs($1-new)>1)i++;} 
    END{if(i>1) print 1; else print 0;}' file1 \ 
    | while read i;do 
if (("${i}" == 1));then 
echo -n "Would you like to continue? [yes or no]: " 
read yno 
. . . 

Я надеюсь, что это помогает

0

Проблема заключается в том, что только вход от меньшего, который полностью потребляется скриптом awk. Консоль недоступна.

Будет что-то вроде этого полезно

i=$(awk 'function abs(x){return (((x < 0.0) ? -x : x) + 0.0)}BEGIN{i=1;}{new=old;old=$1}{if(abs($1-new)>1)i++;}END{if(i>1) print 1; else print 0;}' file) 
if ((${i}));then 
    echo -n "Would you like to continue? [yes or no]: " 
    read yno 
    case ${yno} in 

    y) 
     echo Continuing... 
     ;; 
    n) 
     echo Exiting... 
     ;; 
    *) 
     echo "Invalid input" 
     ;; 
    esac 
else echo Cont... 
fi 
Смежные вопросы