2012-01-04 3 views
1

J'ai un fichier avec le contenu:utilisation Condition

$> cat file 
1 
2 
4 

Maintenant, je voudrais utiliser/exécuter un autre script, si les différences entre les nombres (soustraction) est supérieur à 1, sortie autre de la principale scénario.

J'ai essayé de le faire de la manière suivante, mais ne fonctionne pas:

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 

je me attends, que si $ {i} == 1, alors je peux prendre une décision, si je veux continuer ou non.

+0

Heureux de vous aider à résoudre votre problème si ces solutions ne sont pas aider, si vous pouvez clarifier votre intention en incitant « voulez-vous ... ». Pourquoi ne pouvez-vous pas faire la soustraction et autoriser les codes de sortie à déterminer ce qui se passe en dehors de awk. Vous dites «mais ne fonctionne pas:», veuillez éditer votre question pour montrer quels messages d'erreur obtenez-vous, ou indiquez pourquoi dites-vous que cela ne fonctionne pas. On dirait que ça devrait marcher. Bonne chance. – shellter

Répondre

1

vous écrit

Je me attends, que si $ {i} == 1,

Oui, mais si $ {i} = "Erreur sur l'entrée" ou un autre valeur, votre déclaration doit indiquer explicitement votre condition. De plus en utilisant moins d'envoyer un fichier à un tuyau est pas une situation standard, pourquoi passer non seulement dans le nom du fichier à awk pour le traitement, à savoir

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 
. . . 

J'espère que cette aide

0

Le problème est que la seule l'entrée est de moins qui est entièrement consommée par le script awk. La console n'est pas disponible.

Would quelque chose comme cela est utile

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 
Questions connexes